我是 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

最佳答案

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

关于linux - 根据文件名作为日期删除所有超过 30 天的文件,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55919214/

10-12 00:20
查看更多