查找标志:-exec rm -rf 与 -delete

查找标志:-exec rm -rf 与 -delete

我认为我在问题中提到的标志是相同的,但我收到前者的以下消息,但后者没有收到任何消息:

$ find . -mindepth 1 -type d -exec rm -rf {} \;
find: `./practice4': No such file or directory
find: `./practice10': No such file or directory
find: `./practice7': No such file or directory
find: `./practice9': No such file or directory
find: `./practice1': No such file or directory
find: `./practice5': No such file or directory
find: `./practice3': No such file or directory
find: `./practice6': No such file or directory
find: `./practice2': No such file or directory
find: `./practice8': No such file or directory

我的额外问题是:是否有更简单的代码来删除所有子目录?删除的顺序是随机的吗?我使用创建目录

$ mkdir practice{1..10}

答案1

从GNU查找手册:

如果您的find' command removes directories, you may find that you get a spurious error message whenfind' 尝试递归到现已删除的目录。使用“-深度”选项通常可以解决这个问题。

其他问题:

  • 命令的简单性取决于您的情况,在列出的情况下为:rm -rf practice*
  • IIRC,文件的处理顺序取决于文件系统。

答案2

雷神已经解释了为什么您会收到此错误以及如何在使用时修复它find

除非您有无法在 shell 脚本中表达的附加条件,否则调用findwith是没有意义的。-mindepth 1你想要做的事情可以写成

rm -rf */

只要当前目录不包含任何名称以 开头的目录.(与 不匹配*)或目录的符号链接(您的find命令排除但上面的 shell 代码段包含)。

相关内容