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はディレクトリに入ることができません。

これを回避する1つの方法は、

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

rmこれにより、コマンドが実行される前に検索が移動します。または、元のコマンドのエラーを単に無視することもできます。

于 2012-09-16T19:40:19.433 に答える
6

epsalonのコメントに基づくと、解決策は-depthオプションを使用することです。これにより、より深いファイルが最初にアクセスされます。

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

トリックを行います。本当にありがとう!

于 2012-09-16T19:42:43.490 に答える