当“参数列表太长”时如何删除所有超过 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 天的文件?的主要内容,如果未能解决你的问题,请参考以下文章