find -execを使用してディレクトリを削除するとエラーメッセージが生成されるのはなぜですか?

find -execを使用してディレクトリを削除するとエラーメッセージが生成されるのはなぜですか?

なぜこれが起こるのか:

find . -type d -name test -exec rm -r {} \;

エラーメッセージの生成:

find: ./foo/test: No such file or directory
find: ./bar/test: No such file or directory
find: ./blech/test: No such file or directory

実際にそのディレクトリを削除しても?

OS X(10.10)の場合です。

ベストアンサー1

readdir()検索はディレクトリからコンテンツを取得するために使用されます。

readdir() はキャッシュを実装するライブラリ関数であり、findキャッシュがなくても、呼び出されたプログラムが見つけたディレクトリを削除したかどうかを知る方法がないため、標準の検索呼び出しは常にこの種のエラーを発生させます。

問題に対するクリーンな解決策があります。

find . -depth ...

(...をfindコマンドラインの残りの部分に置き換えます)

findディレクトリ自体の前に、すべてのディレクトリの内容を処理するように指示します。

find注:マニュアルページを読むことをお勧めします。 26年間、遅く-exec ... {} \;てクリックするたびにサブプロセスを作成するより良いソリューションがありました。-exec ... {} +引数の最大サイズに達するまで、パス名を収集しながら探します。

おすすめ記事