查找和 rm 命令不会递归删除

查找和 rm 命令不会递归删除

我们有一个简单的脚本,用于删除旧文件夹。问题是它不会递归删除它们。

这是命令:

find $PWD -maxdepth 5 -mtime +80 | xargs -I{} rm -Rvf {}

它删除了文件和文件夹,但突然尝试从已删除的目录中删除文件。

服务器正在运行CentOS,并使用以下方式安装文件夹NFS从存储中。

我们可以做什么?

答案1

发生这种情况的原因是,rm从命令中接收了所有找到的文件和目录的列表find。并且列表中的目录会递归地位于它们前面并删除文件。

我可以提供两种解决方案:

  1. 种类递归 find结果:find $PWD -maxdepth 5 -mtime +80 | sort -r | xargs -I{} rm -Rvf {}
  2. 使用-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 {} \;

我认为这确实是最好的方法。

相关内容