我有一个包含82000个文件和目录的日志文件目录(大约一半是文件,一半是目录)。
我需要删除所有3天前的文件和目录。
在一个包含37000个文件的目录中,我能够使用以下命令来实现:
find * -mtime +3 -exec rm {} \;
但是当我有82000个文件/目录时,我会收到以下错误:
/usr/bin/find: Argument list too long
我该如何解决这个错误,以便我可以删除所有3天前的文件/目录?
我有一个包含82000个文件和目录的日志文件目录(大约一半是文件,一半是目录)。
我需要删除所有3天前的文件和目录。
在一个包含37000个文件的目录中,我能够使用以下命令来实现:
find * -mtime +3 -exec rm {} \;
但是当我有82000个文件/目录时,我会收到以下错误:
/usr/bin/find: Argument list too long
我该如何解决这个错误,以便我可以删除所有3天前的文件/目录?
要删除当前目录中的所有文件和目录:
find . -mtime +3 | xargs rm -Rf
或者,更符合原贴作者的命令:
find . -mtime +3 -exec rm -Rf -- {} \;
--
,像这样:find . -mtime +3 -exec rm -- {} \;
- domen--
是什么意思。 - Asclepius也可以使用:
find . -mindepth 1 -mtime +3 -delete
不要删除目标目录
对于原问题的另一个解决方案,特别适用于您只想从文件夹中删除一些旧文件的情况,可以采用以下方法:
find . -name "*.sess" -mtime +100
等等等等.. 引号块中的 shell 通配符,因此允许您 "查找" 数百万个文件 :)
find -mtime +3 -exec rm {} +
吗? - Gilles Quénotfind * -mtime +3 |xargs rm
可以解决那个问题。 - Mats Peterssonfind *
,使用find .
会更好。因为 shell 通配符*
会扩展成大量的文件和目录,导致问题。 - artless noise