回答:
最初に入力するもの:
man find
man xargs
find
デフォルトでは標準出力にコマンドを印刷した結果、ので、-print
オプションは通常必要ではないが、-print0
スペースや改行を含む名前を正しく解釈することができるように0(NULL)バイトでファイル名を分離します。
この-exec
オプションは、xargsの代わりに使用できるものです。findコマンドは、検出した項目ごとにコマンドを実行します。
このxargs
コマンドは、スペースまたは改行で区切られた文字列を読み取り(通常はfindコマンドからですが、どこからでも取得できます)、各文字列に対してコマンドを実行します。
xargsが-0オプションで実行される場合、NULLで区切られた文字列が出力として期待されます。find ... -print0
xargsの利点は、文字列をグループ化できるため、n回ではなく1回または2回だけコマンドを実行できることです。
したがって、通常の使用では:
find start_directory -name '*.txt' | xargs ls -l
findはファイル名をリストし、xargsは次のようなコマンドを発行します。
ls -l file1.txt file2.txt file3.txt ... fileN.txt
findコマンドを発行するよりも高速です。
ls -l file1.txt
ls -l file2.txt
ls -l file3.txt
ls -l ...
ls -l fileN.txt
おそらくすべてこのPOSIX構文をサポートする現在のfind実装ではxargsは必要ないことに注意してください。
find directory -name '*.txt' -exec ls -l {} +
これは、xargsバリアントよりも簡単でわずかに高速です。
find directory -name '*.txt' | xargs ls -l
次の記事を参照してください。
LinuxおよびUnixの例xargsを使用したコマンドチュートリアルの検索
:コマンドライン引数を制御および使用する方法