いつ発見されるのか? -exec COMMAND{}+` COMMAND を何度も実行しますか?

いつ発見されるのか? -exec COMMAND{}+` COMMAND を何度も実行しますか?

もし私がするなら

find . -exec echo {} +

すべてのパスを1行に印刷します。つまり、コマンドはecho一度だけ実行されます。

しかし、それman findによると

-exec command {} +
    ... the number of invocations of the command will 
be much  less  than  the  number  of matched files. ...

場合によっては、コマンドが複数回実行されるようです。私は正しいですか?例えばください。

ベストアンサー1

POSIXの定義find -execユーティリティ_名前[パラメータ...] {} +ように:

注記の終わりは、<セミコロン>または<プラス記号>で句読点を付ける必要があります。 2 文字の「{}」のみを含む引数の直後にある <プラス記号> のみが、基本式の終わりを強調します。 <プラス記号>の他の用途は特別な用途と見なすべきではありません。基本式に<セミコロン>が付いている場合、ユーティリティはユーティリティ名各パス名に対して一度呼び出され、ユーティリティーが終了状態でゼロ値を返す場合、デフォルトのパスはtrueと評価する必要があります。 ㅏユーティリティ名またはディスカッション2文字の「{}」のみを現在のパス名に置き換える必要があります。もしユーティリティ名またはディスカッション文字列に「{}」の2文字が含まれているかどうかは実装によって定義されますが、「{}」の2文字のみが含まれるわけではありません。探すこれら2つの文字を置き換えるか、変更されていない文字列を使用してください。

基本式が<プラス記号>で区切られている場合、基本式は常にtrueと評価され、基本式が評価されるパス名はコレクションとして集計されます。実用的な事項ユーティリティ名 各集約パス名セットに対して一度に呼び出す必要があります。各呼び出しは、コレクションの最後のパス名が集計された後に開始する必要があります。探すユーティリティは、この基本の次のグループ(存在する場合)の最初のパス名を集計する前に終了しますが、呼び出しが他の基本の評価の前、途中、または後に発生するかどうかは指定されません。呼び出しが終了状態でゼロ以外の値を返す場合探す ユーティリティはゼロ以外の終了ステータスを返す必要があります。 2 文字の「{}」のみを含む引数は、集約されたパス名のセットで置き換える必要があり、各パス名は集計順序に従って呼び出しユーティリティに別々の引数として渡されます。複数のパス名のセットのサイズは、ユーティリティの実行によってシステムの{ARG_MAX}制限を超えないように制限する必要があります。。 2 文字 "{}" を含む引数が複数ある場合、動作は指定されません。

見つかったファイル名の長さがシステム設定を超えると、ARG_MAXこのコマンドが実行されます。

使用ARG_MAXできる構成ファイルのインポート:

$ getconf ARG_MAX
2097152

一部のシステムでは、実際の値がARG_MAX異なる場合があります。ここ詳細については。

おすすめ記事