仅删除超过 7 天的文件:-mtime 和 find

仅删除超过 7 天的文件:-mtime 和 find

发现了一些类似的问题,但不太匹配。

我有一个备份目录 (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 +7m+7匹配其年龄向下舍入到下一个整数天数且严格大于 7 的文件,因此将匹配 8 天或更早的文件(使用 时的常见陷阱find)。

要同时删除旧的隐藏文件,请添加Dglob 限定符。

如果没有匹配的文件,您将收到一条错误消息。您可以通过添加Nglob 限定符来避免它(然后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

相关内容