小编典典

根据文件名作为日期,删除所有超过30天的文件

linux

我是bash的新手,我的任务是删除所有30天以上的文件,我可以根据文件名来解决这个问题Y_M_D.ext 2019_04_30.txt

我知道我可以ls在包含文件的文件夹中列出所有文件。我知道我可以获取今天的日期,$ date并可以对其进行配置以匹配文件格式$ date "+%Y_%m_%d"

我知道我可以使用删除文件rm

我如何将所有这些结合到一个bash脚本中,该脚本从今天起删除30天以上的文件?

在伪python代码中,我想它看起来像:

for file in folder:
    if file.name to date > 30 day from now:
        delete file

阅读 578

收藏
2020-06-03

共1个答案

小编典典

我绝不是系统管理员,但您可以考虑以下简单的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,但不幸的是,我不习惯使用。

2020-06-03