5

我在一个 linux 系统上,我想知道以下 find 执行有什么问题:

mkdir a && touch a/b                      
find . -name a -type d -exec echo '{}' \; 
./a
find . -name a -type d -exec rm -r '{}' \;
find: `./a': No such file or directory

echo 的调用仅用于测试目的。我希望最后一个命令完全删除目录 './a' 并返回 0。相反,它会删除目录并生成错误消息。重复一遍,它确实删除了目录!到底是怎么回事?

4

3 回答 3

11

rm执行没有问题。问题是find令人困惑,因为它知道目录./a在那里,它会尝试访问该目录以查找名为a. 但是,find 无法进入该目录,因为它已被删除。

避免这种情况的一种方法是

find -name a -type d | xargs rm -r

rm这将让 find 在命令执行之前继续前进。或者,您可以简单地忽略原始命令中的错误。

于 2012-09-16T19:40:19.433 回答
6

根据 epsalon 的评论,解决方案是使用 -depth 选项,这会导致首先访问更深的文件。

find . -depth -name a -type d -exec rm -r '{}' \;

成功了。非常感谢!

于 2012-09-16T19:42:43.490 回答
5

如果性能是一个问题,请使用 -prune 以防止 find 下降到名为“a”的目录中:

find . -name a -type d -prune -exec rm -r '{}' \;
于 2012-10-23T06:57:16.963 回答