我有很多每日备份档案.为了管理磁盘使用情况,我需要一个bash脚本来删除超过1个月的所有文件,但是保留所有文件在星期一创建,即使它们超过1个月.
例如,这将删除超过30天前修改的所有文件:
find /path/to/files* -type f -mtime +30 -delete
Run Code Online (Sandbox Code Playgroud)
但我真的不知道如何保存星期一创建的文件.
Sto*_*ica 13
@ JoSo答案稍微简单且更谨慎的版本:
find /path/to/files -type f -mtime +30 \
-exec sh -c 'test $(date +%a -r "$1") = Mon || echo rm "$1"' -- {} \;
Run Code Online (Sandbox Code Playgroud)
差异:
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"' -- {} \;
Run Code Online (Sandbox Code Playgroud)
据find我所知,没有工作日检查,你需要打电话给外部程序.
find /path/to/files -type f -mtime +30 \
-exec sh -c \
'[ "$(date +%u -d @"$(stat -c %Y "$1")")" != 1 ] && rm "$1"' -- {} \;
Run Code Online (Sandbox Code Playgroud)
更新:使用-r切换到date(Kudos到Janos)并且仅测试,而不是在shell命令中删除可能产生最干净的版本:
find /path/to/files -type f -mtime +30 \
-exec sh -c 'test "$(date +%u -r "$1")" != 1' -- {} \; \
-print # or -delete instead
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
22984 次 |
| 最近记录: |