findとrm -rf、なぜエラーが印刷されるのですか? [コピー]

findとrm -rf、なぜエラーが印刷されるのですか? [コピー]

私は間違いなく何かが間違っていますが、それを理解することはできません。rm -rfディレクトリで実行するとfindエラーが発生しますNo such file or directoryが、手動で実行するとそのようなことは発生しません。次のディレクトリツリーを想定します。

[~]$ mkdir -p blueprints/blog
[~]$ find
.
./blueprints
./blueprints/blog

ディレクトリを作成し、ここにファイルを追加します。

[~]$ mkdir ./blueprints/blog/__pycache__ ./blueprints/__pycache__ ./__pycache__
[~]$ touch ./blueprints/blog/__pycache__/dummy.pyc ./__pycache__/dummy.pyc

私はそれらを持っていると確信しています:

[~]$ find . -type d -name '__pycache__'
./blueprints/blog/__pycache__
./blueprints/__pycache__
./__pycache__

ただし、これを削除すると、findからエラーが印刷されます。

[~]$ find . -type d -name '__pycache__' -exec rm -rf {} \;
find: ‘./blueprints/blog/__pycache__’: No such file or directory
find: ‘./blueprints/__pycache__’: No such file or directory
find: ‘./__pycache__’: No such file or directory

削除されましたが、そこで何が起こりましたか?


別の方法で実行してもエラーは発生しません。

[~]$ mkdir ./blueprints/blog/__pycache__ ./blueprints/__pycache__ ./__pycache__
[~]$ touch ./blueprints/blog/__pycache__/dummy.pyc ./__pycache__/dummy.pyc
[~]$ find . -type d -name '__pycache__' -exec echo rm -rf {} \; | sh

findがこのエラーを報告するのはなぜですか? 私が知っている限り、そのタスクが-exec存在する場合、そのタスクは呼び出されません-print(これは私が元々疑っていたものです)。

find 4.6.0とfind 4.5.11を使用して上記の内容を複製しました。

ベストアンサー1

ディレクトリの削除を使用すると、ディレクトリをrm -rf削除した後もディレクトリに入ろうとします(何をしているのかfindわからない)。rmここでエラーが発生します。

このフラグを追加する必要があります-depth

~からPOSIXfindマニュアル:

-depth

デフォルトは常にtrueと評価する必要があり、ディレクトリ階層を降順に実行して、ディレクトリ内のすべてのエントリがディレクトリ自体の前に実行されるようにします。ホームディレクトリが指定されていない場合、-depthディレクトリ内のすべてのエントリはディレクトリ自体の後に機能する必要があります。キー値が指定されている場合、-depthそのキー値は通常評価されない場合でも、式全体に適用されます。-depth

おすすめ記事