我的目录中包含 2010 年的文件。我想删除所有超过 500 天的文件,我尝试了以下操作:
find /var/log/arc/* -type f -mtime +500 -delete {}\;
但我明白了:
-bash: /usr/bin/find: Argument list too long
据我所知,这意味着文件太多并且find
无法处理它们。但即使我投入了+2000
3 年多的时间,我仍然得到这个。
我在这里缺少什么?
答案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 天前修改的文件。