我有很多日常备份文件。要管理磁盘使用情况,我需要一个 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/