我认为我在问题中提到的标志是相同的,但我收到前者的以下消息,但后者没有收到任何消息:
$ 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 when
find' 尝试递归到现已删除的目录。使用“-深度”选项通常可以解决这个问题。
其他问题:
- 命令的简单性取决于您的情况,在列出的情况下为:
rm -rf practice*
。 - IIRC,文件的处理顺序取决于文件系统。
答案2
雷神已经解释了为什么您会收到此错误以及如何在使用时修复它find
。
除非您有无法在 shell 脚本中表达的附加条件,否则调用find
with是没有意义的。-mindepth 1
你想要做的事情可以写成
rm -rf */
只要当前目录不包含任何名称以 开头的目录.
(与 不匹配*
)或目录的符号链接(您的find
命令排除但上面的 shell 代码段包含)。