find -execはすべての結果を事前に検索しますか、それとも前の結果を実行したときに追加された結果を見つけますか?

find -execはすべての結果を事前に検索しますか、それとも前の結果を実行したときに追加された結果を見つけますか?

したがって、最初の1000回ダウンロードしてから5秒の長さの5000オーディオファイルをダウンロードするには、次のようにします。

find . -iname "*.wav" -exec play {} \;

コマンドを最初に実行したときにあった1000個のファイルのみを再生しますか、それともexecが完了できるよりもファイルがより速くダウンロードされるため、5000個のファイルをすべて再生しますか?

ベストアンサー1

これは実装によって異なります。標準理論:

検索中のディレクトリ階層からファイルが削除または追加されるかどうかは指定されません。探す検索にファイルを含めます。

ディレクトリレイアウトとファイルシステムの動作によっては、両方の動作が発生する可能性があると思います。findエントリを読み取るためにディレクトリを開いた後、新しく追加されたエントリが返されても、readdirこのfind問題は処理されます。しかし、これも明示されていませんPOSIX:

最後の呼び出しopendir()時以降にファイルが削除されるかディレクトリに追加された場合、後続の呼び出しがrewinddir()そのファイルのエントリを返すかどうかreaddir()は指定されません。


少なくともmacOSでGNU検索とBSD検索を使用すると、動作はディレクトリ内のすべてのエントリを一度に読み取るようです。

% (sleep 5; touch abc) & find . -exec sleep 5 \; -print
[1] 57727
.
[1]  + 57727 done       ( sleep 5; touch abc; )
./foo
./bar

どのように見つからないかを確認してくださいabc。しかし、最初のものがsleep減少すると、find再帰は次のようになります。. 後ろに終わったsleep:

% rm abc; (sleep 2; touch abc) & find . -exec sleep 5 \; -print
[1] 57971
[1]  + 57971 done       ( sleep 2; touch abc; )
.
./abc
./foo
./bar

したがって、ファイルが別のサブディレクトリにダウンロードされた場合、find実行後にダウンロードしたファイルの一部は再生されますが、一部は再生されないことがあります。

おすすめ記事