bash:删除所有早于 1 个月的文件,但保留星期一的文件

标签 bash sh

我有很多日常备份文件。要管理磁盘使用情况,我需要一个 bash 脚本来删除所有超过 1 个月的文件,但保留所有在星期一创建的文件,即使它们超过 1 个月。

例如,这将删除 30 天前最后一次修改的所有文件:

 find /path/to/files* -type f -mtime +30 -delete

但我真的不知道如何保留在星期一创建的文件。

最佳答案

@JoSo 回答的更简单和更谨慎的版本:

find /path/to/files -type f -mtime +30 \
    -exec sh -c 'test $(date +%a -r "$1") = Mon || echo rm "$1"' -- {} \;

区别:

  • 使用date -r直接获取文件的最后修改日期
  • 使用 %a 处理更易于理解的工作日名称
  • 只需先回显 rm "$1" 即可查看将要删除的内容。如果看起来不错,那么要么坚持 | sh 最后才真正执行,或者去掉 echo

但是,@JoSo 正确地指出 date +%a 依赖于语言环境,因此这些版本确实更安全:

find /path/to/files -type f -mtime +30 \
    -exec sh -c 'test $(date +%u -r "$1") = 1 || echo rm "$1"' -- {} \;
find /path/to/files -type f -mtime +30 \
    -exec sh -c 'test $(LC_TIME=C date +%a -r "$1") = Mon || echo rm "$1"' -- {} \;

关于bash:删除所有早于 1 个月的文件,但保留星期一的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20034415/

相关文章:

bash - 读取文件权限并在 shell 中应用于另一个文件

bash - shell脚本(bash)中的${}命令是什么

linux - 比较一个文件中的数字,并在该数字出现在 shell 脚本中的字符串内时将其与文件中的数字进行匹配

linux - 在 Linux 中过滤命令输出

bash - 有没有一种简单的方法可以用 bash 计算分位数?

python - 如何通过python命令使用python2.7?

git - 在每次 git 提交时运行 bash 脚本

linux - sh脚本访问函数中的全局变量

batch-file - 您可以将 .sh 文件转换为 .bat 文件吗?

linux - 通过 bash 命令注释以查看 pkill