我是bash的新手,我的任务是删除所有30天以上的文件,我可以根据文件名来解决这个问题Y_M_D.ext 2019_04_30.txt。
Y_M_D.ext
2019_04_30.txt
我知道我可以ls在包含文件的文件夹中列出所有文件。我知道我可以获取今天的日期,$ date并可以对其进行配置以匹配文件格式$ date "+%Y_%m_%d"
ls
$ date
$ date "+%Y_%m_%d"
我知道我可以使用删除文件rm。
rm
我如何将所有这些结合到一个bash脚本中,该脚本从今天起删除30天以上的文件?
在伪python代码中,我想它看起来像:
for file in folder: if file.name to date > 30 day from now: delete file
我绝不是系统管理员,但您可以考虑以下简单的shell脚本:
# Generate the date in the proper format discriminant=$(date -d "30 days ago" "+%Y_%m_%d") # Find files based on the filename pattern and test against the date. find . -type f -maxdepth 1 -name "*_*_*.txt" -printf "%P\n" | while IFS= read -r FILE; do if [ "${discriminant}" ">" "${FILE%.*}" ]; then echo "${FILE}"; fi done
请注意,专业人员可能会将其视为“外行”解决方案。也许使用可以更好地处理此问题awk,但不幸的是,我不习惯使用。
awk