我尝试按照之前的许多讨论执行删除查找并删除
然而我的尝试带来了不同的体验。
find . -type d -name "koko" -exec rm -rf {} \;
删除指定的文件夹koko
但给我误报
find: ./koko: No such file or directory
我的终端可能出了什么问题。
我正在使用tcsh
, 和-delete
switch 与 find 效果不好。
这是快照
答案1
如果您使用-prune
中建议的选项这回答,错误消息不会出现。
引用上面的答案,
-prune
在您要删除的目录上使用,告诉 find 不要费心尝试在其中查找文件。
测试
mkdir koko
cd koko
touch file{1,2}
cd ..
find . -type d -name "koko" -prune -exec rm -rf {} \;
执行上述find
命令后,我得到提示,没有任何错误。但是,如果我不使用该-prune
选项,我会收到与您提到的相同的错误。
答案2
问题是find
找到了一个目录,它与您的选择相匹配,然后执行命令。然而,find
想要做自然而然的事情,那就是通过目录树递归,但是它刚刚找到的目录已经消失了!因此出现错误消息。
您可以通过提供选项来解决此问题--depth
,这意味着在目录本身之前处理每个目录的内容。手册页还提到该-delete
选项也暗示了这个选项,就是出于上述原因。