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


89

我有一个日志文件目录,其中包含82000个文件和目录(大约一半)。

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

在其中包含37000个文件的目录中,我能够执行以下操作:

find * -mtime +3 -exec rm {} \;

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

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

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


1
你试过了find -mtime +3 -exec rm {} +吗?
吉尔·奎诺

1
我相信跑步find * -mtime +3 |xargs rm会解决这个问题。
Mats Petersson,

9
我认为唯一的问题是find *find .更好。带有globe的shell将扩展*为一个巨大的文件和目录列表。
artless的噪音

@artlessnoise很特别。
sjas

Answers:


120

删除所有文件 ,并在目录内的当前目录:

find . -mtime +3 | xargs rm -Rf

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

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

26
-1问题是“ find *”中的星星,您通过使用“ find”解决了它。代替。Xargs在这里产生误导。
Aleksandr Levchuk

7
@AleksandrLevchuk它解决了OP的问题,因此不值得一票
hd1

11
问题:“找到* -mtime +3 -exec rm {} \;” 给参数列表太长。答案:使用“查找。-mtime +3 -exec rm {} \;”
亚历山大·列夫丘克

2
您可能要--在rm之后添加,例如find . -mtime +3 -exec rm -- {} \;
domen 2014年

8
没人说这--是干什么的。
Acumenus

59

也可以使用:

find . -mindepth 1 -mtime +3 -delete

不删除目标目录


4
最好的答案,比打电话给rm更干净(而且可能更安全)。也适用于子目录。
basic6

16

原始问题的另一种解决方案,特别是。如果只想删除文件夹中的一些较旧的文件,则很有用,如下所示:

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

等..引号阻止外壳通配符,从而使您可以“查找”数百万个文件:)

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.