我正在尝试删除/mnt/games/codes
中所有早于60天的目录。这些目录可能是空的,也可能不是,但我希望它们都被删除。
所以看着这里,我发现了这个命令:
find /mnt/games/codes/* -mtime +60 -type d -exec rm -rf {} ;
但它给了我一个错误:
没有这样的文件或目录
所以我尝试了这个:
find /mnt/games/codes/* -mtime +60 -type d -exec rmdir {} ;
但它给了我一个全新的错误,看起来像这样:
目录不是空
有没有办法用一个命令删除这些?
谢谢!
您的问题是因为find
在迭代完搜索基目录之前就删除了这些目录,所以对已经删除的条目调用rm -rf
。
通过添加-depth
选项可以很容易地解决此问题。
此外,您确实应该用双破折号--
结束rm
选项,以防止find
命令提供的参数被rm
命令解释为选项参数。
find /mnt/games/codes/ -depth -mtime '+60' -type d -exec rm -rf -- {} ;
以下操作之所以有效,是因为它先查找,然后通过管道传输到xargs。我相信这将阻止";arg列表太长";当你有很多东西要找的时候,问题也会随之而来。
find /mnt/games/codes/* -mtime -60 -type d | xargs rm -rf