发现了一些类似的问题,但不太匹配。
我有一个备份目录 (sql),想要删除该目录中超过 7 天的所有文件,并保持所有子目录完好无损。
这就是我所拥有的:
find /var/log/mbackups -mtime +7 -type f -delete
这是实现我所追求的目标的正确方法吗?
答案1
您的命令将查看顶级目录/var/log/mbackups
,并深入到任何子目录,删除符合 7 天标准的文件。它不会删除目录本身。
如果您希望命令仅查看/var/log/mbackups
目录中的文件,并且不下降到子目录,您需要添加该限制:
find /var/log/mbackups -maxdepth 1 -mtime +7 -type f -delete
一般来说,您可以find
通过-delete
用无害的内容替换操作来测试命令,例如-print
(正如暗示的那样-depth
,您在这里也需要):-delete
-depth
find /var/log/mbackups -depth -mtime +7 -type f -print
答案2
使用 zsh:
rm -f /var/log/mbackups/*(.m+6)
与...一样:
rm -f /var/log/mbackups/*(.^m-7)
.
将删除未隐藏且在过去 7 天内未修改的常规(带有)文件。与 的 一样find
,-mtime +7
将m+7
匹配其年龄向下舍入到下一个整数天数且严格大于 7 的文件,因此将匹配 8 天或更早的文件(使用 时的常见陷阱find
)。
要同时删除旧的隐藏文件,请添加D
glob 限定符。
如果没有匹配的文件,您将收到一条错误消息。您可以通过添加N
glob 限定符来避免它(然后rm
将在没有文件名参数的情况下调用,但使用-f
,它不应该抱怨它)。
答案3
免责声明:我是 rawhide (rh) 的现任作者(请参阅https://github.com/raforg/rawhide)
几乎。非常接近。您尝试的正确版本是:
find /var/log/mbackups -maxdepth 1 -mtime +6 -type f -delete
如果你发现寻找的-mtime
谓词参数不够直观,您可以使用生皮(右旋) 反而:
rh -UUU -r /var/log/mbackups 'f && old(7*days)'
-UUU
取消链接/删除/删除匹配项。
-r
就好像寻找的,-mindepth 1 -maxdepth 1
并且仅搜索搜索路径下方的一级,因此不会搜索子目录。
f
匹配常规文件。
old(7*days)
匹配至少 7 天前最后修改的内容。
答案4
警告:-delete
使用时是非标准的(不可移植的)并且存在风险 gfind
。
请记住,它rm
有一些安全限制,但gfind
手册页没有提到-delete
.因此我建议使用官方方法:
find /var/log/mbackups -mtime +7 -type f -exec rm {} +
这甚至不比使用非标准方法慢-delete
。