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

Edw*_*uay 88 linux file-io resource-cleanup

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

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

在一个包含37000个文件的目录中,我能够通过以下方式执行此操作:

find * -mtime +3 -exec rm {} \;
Run Code Online (Sandbox Code Playgroud)

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

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

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

hd1*_*hd1 121

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

find . -mtime +3 | xargs rm -Rf
Run Code Online (Sandbox Code Playgroud)

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

find . -mtime +3 -exec rm -Rf -- {} \;
Run Code Online (Sandbox Code Playgroud)

  • -1问题是"查找*"中的明星,您使用"查找"解决了问题.代替.Xargs在这里误导. (24认同)
  • 问题:"找*-mtime +3 -exec rm {} \;" 给出参数列表太长.答案:使用"find.-mtime +3 -exec rm {} \;" (10认同)
  • @AleksandrLevchuk它解决了OPs的问题,因此不值得投票 (7认同)
  • 没有人说` - `是什么意思. (6认同)
  • 你可能想在rm之后添加`--`,比如`find.-mtime +3 -exec rm - {} \;` (2认同)

van*_*eem 59

也可以用:

find . -mindepth 1 -mtime +3 -delete
Run Code Online (Sandbox Code Playgroud)

不删除目标目录

  • 最好的答案,比调用rm(可能更安全)更清洁.也适用于子目录. (4认同)

62m*_*mkv 15

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

find . -name "*.sess" -mtime +100 
Run Code Online (Sandbox Code Playgroud)

等等.引用块shell通配符,从而允许你"找到"数百万个文件:)