このcat
コマンドは何も操作しません。入力が終了したことが通知されるまで、標準入力で動作します。Rampion が指摘しているように、cat
ここではコマンドは必要ありませんが、コマンドは暗黙の入力 (標準入力) に対して動作しており、何もに対して動作していません。
このxargs
コマンドは から出力を読み取り、情報を(唯一の) 引数として指定されcat
たコマンドへの引数にグループ化します。man
制限 (コマンド ラインで構成可能) に達すると、man
コマンドが実行されます。
このfind ... -print0 | xargs -0 ...
イディオムは、空白、タブ、改行などの扱いにくい文字を含むファイル名を扱います。このfind
コマンドは、各ファイル名の後に ASCII NUL ( '\0'
) を付けて出力します。これは、単純なファイル名に使用できない 2 つの文字のうちの 1 つです。もう 1 つは '/' です (もちろん、パス名には使用されますが、単純なファイル名には使用されません)。あなたが提供するシーケンスと直接同等ではありません。xargs
サイズ制限まで、ファイル名のコレクションを単一の引数リストにグループ化します。grep
名前が十分に短い場合 (通常はそうです)、ファイル名よりも実行回数が少なくなります。
grep
また、検索するファイルが複数ある場合、または常にファイル名を出力し、オプションが使用されるようにオプションをサポートしている場合にのみ、マテリアルが見つかったファイル名のみを出力することに注意してください-H
。それに対するGNU拡張grep
がこれを行います。ファイル名が常に表示されるようにするための移植可能な方法は/dev/null
、最初のファイルとしてリストすることです (つまり ' xargs grep something /dev/null
')。検索にそれほど時間はかかりません/dev/null
。