我们有一个简单的脚本,用于删除旧文件夹。问题是它不会递归删除它们。
这是命令:
find $PWD -maxdepth 5 -mtime +80 | xargs -I{} rm -Rvf {}
它删除了文件和文件夹,但突然尝试从已删除的目录中删除文件。
服务器正在运行CentOS,并使用以下方式安装文件夹NFS从存储中。
我们可以做什么?
答案1
发生这种情况的原因是,rm
从命令中接收了所有找到的文件和目录的列表find
。并且列表中的目录会递归地位于它们前面并删除文件。
我可以提供两种解决方案:
- 种类递归
find
结果:find $PWD -maxdepth 5 -mtime +80 | sort -r | xargs -I{} rm -Rvf {}
- 使用
-delete
选项而不是外部rm
工具。find $PWD -maxdepth 5 -mtime +80 -delete
更新.1 正如建议的那样@Dimitar您可以添加-type d
,然后 find 将仅针对目录进行操作。 这可能会更快,但在这种情况下您不会清理$PWD
目录中的旧文件。
find $PWD -maxdepth 5 -mtime +80 -type d | xargs -I{} rm -Rvf {}
更新.2正如建议的那样@ezra-s你可以不用xargs
:
find $PWD -maxdepth 5 -mtime +80 -exec rm -Rvf {} \;
我认为这确实是最好的方法。