当“参数列表太长”时如何删除所有超过 3 天的文件?

Posted

技术标签:

【中文标题】当“参数列表太长”时如何删除所有超过 3 天的文件?【英文标题】:How to delete all files older than 3 days when "Argument list too long"? 【发布时间】:2013-01-21 18:33:06 【问题描述】:

我有一个日志文件目录,里面有 82000 个文件和目录(大约一半)。

我需要删除所有超过 3 天的文件和目录。

在一个包含 37000 个文件的目录中,我可以这样做:

find * -mtime +3 -exec rm  \;

但是对于 82000 个文件/目录,我得到了错误:

/usr/bin/find: 参数列表太长

如何解决此错误,以便删除所有超过 3 天的文件/目录?

【问题讨论】:

你试过find -mtime +3 -exec rm +吗? 我相信运行find * -mtime +3 |xargs rm 会解决这个问题。 我认为唯一的问题是find *find . 更好。 shell globing 将 * 扩展为一个巨大的文件和目录列表。 @artlessnoise 很到位。 【参考方案1】:

删除当前目录中的所有文件目录:

find . -mtime +3 | xargs rm -Rf

或者,更符合OP的原始命令:

find . -mtime +3 -exec rm -Rf --  \;

【讨论】:

-1 问题是“find *”中的星号,您使用“find”解决了它。反而。 Xargs 在这里具有误导性。 @AleksandrLevchuk 它解决了 OPs 问题,因此不值得反对 问题:“find * -mtime +3 -exec rm \;”给出的参数列表太长。答:使用“find .-mtime +3 -exec rm \;” 您可能想在 rm 之后添加 --,例如 find . -mtime +3 -exec rm -- \; 没有人说-- 的用途。【参考方案2】:

也可以使用:

find . -mindepth 1 -mtime +3 -delete

不删除目标目录

【讨论】:

最佳答案,比调用 rm 干净得多(而且可能更安全)。也适用于子目录。【参考方案3】:

原始问题的另一种解决方案,尤其是。如果您只想删除文件夹中的一些旧文件,这很有用,就像这样:

find . -name "*.sess" -mtime +100 

等等......

【讨论】:

以上是关于当“参数列表太长”时如何删除所有超过 3 天的文件?的主要内容,如果未能解决你的问题,请参考以下文章

Unix tar返回参数列表太长[重复]

删除超过 7 天的文件

text 删除文件参数列表太长

如何从 iPhone 的文档目录中删除超过两天的文件

删除超过x年或数天的文件

删除所有超过30天的文件