删除超过 500 天的文件

删除超过 500 天的文件

我的目录中包含 2010 年的文件。我想删除所有超过 500 天的文件,我尝试了以下操作:

find /var/log/arc/* -type f -mtime +500 -delete {}\;      

但我明白了:

-bash: /usr/bin/find: Argument list too long

据我所知,这意味着文件太多并且find无法处理它们。但即使我投入了+20003 年多的时间,我仍然得到这个。

我在这里缺少什么?

答案1

您错过了find不需要文件列表作为输入的情况。问题是 glob/var/log/arc/*扩展到太多文件。但是,find默认情况下会递归到子目录,因此根本不需要使用 glob:

find /var/log/arc/ -type f -mtime +500 -delete

-delete是一个非标准谓词。如果您的find实现不支持它,您可以使用:

find /var/log/arc/ -type f -mtime +500 -exec rm -f {} +

反而。

答案2

免责声明:我是现任的生皮(右旋) (看https://github.com/raforg/rawhide

你所缺少的是寻找只需要目录 ( /var/log/arc),不需要该目录 ( ) 中的所有文件/var/log/arc/*。删除/*and {}\;(不应该在那里)将修复它GNU 查找。对于非GNU 查找,您还需要替换-delete {}\;-exec /bin/rm '{}' \;.

FWIW,替代方案寻找是我的生皮(右旋) 程序。有了它,您可以执行以下操作:

rh -UUU /var/log/arc 'f && old(500*days)'

它非常相似,但更短且更具可读性。

-UUU取消链接/删除/删除匹配项。

f(或file) 匹配常规文件。

old(500*days)匹配至少 500 天前修改的文件。

相关内容