"xargs"コマンドの使用例

説明と紹介

xargsコマンドは通常、あるコマンドの出力が入力引数として別のコマンドに渡されるコマンドラインで使用されます。

多くの場合、 "パイプ"と "リダイレクション"演算子は同じ型のトランザクションを実行するため、xargsなどの特別なコマンドは必要ありません。 しかし、引数にスペースが含まれていてxargsが克服した場合など、基本的な配管とリダイレクションのメカニズムに問題があることがあります。

さらに、xargsは、指定されたすべての引数を処理するために、必要に応じて指定されたコマンドを繰り返し実行します。 実際には、xargsが指定されたコマンドを実行するたびに、標準入力ストリームから読み込む引数の数を指定できます。

一般に、xargsコマンドは、データがストリーミングされる第2のコマンド(パイプ演算子「|」を使用)のオプションまたは引数の一部として1つのコマンドの出力を使用する場合に使用する必要があります。 データが第2のコマンドの(標準)入力であることを意図している場合、通常の配管で十分である。

たとえば、 lsコマンドを使用してファイル名とディレクトリのリストを生成し、このリストをechoを実行するxargsコマンドにパイプすると、次のように各繰り返しでechoによって処理されるファイル名またはディレクトリ名の数を指定できます:

ls | xargs -n 5エコー

この場合、 エコーは一度に5つのファイル名またはディレクトリ名を受け取ります。 echoは最後に改行文字を追加するので、各行に5つの名前が書き込まれます。

さらなる処理のために別のコマンドに渡される大規模で予測不可能な数値項目(ファイル名など)を返すコマンドを実行する場合は、過負荷とクラッシュを避けるために2番目のコマンドが受け取る引数の最大数を制御することをお勧めします。

次のコマンドラインは、 find intによって生成されたファイル名のストリームを、200のグループに渡してからcpコマンドに渡し、それらをバックアップディレクトリにコピーします。

./-タイプf -name "* .txt" -print | xargs -l200 -i cp -f {} ./backup

findコマンドの "./"要素は、検索するカレントディレクトリを指定します。 "-type"フラグはファイルへの検索を制限し、 "-name" * .txt "フラグは" .txt "拡張子を持たないものをさらにフィルタリングします.xargsの-iフラグは、 }記法は蒸気の各ファイル名を表します。

次のコマンドは、/ tmpディレクトリ以下のcoreという名前のファイルを検索し、削除します。

find / tmp -nameコアタイプf -print | xargs / bin / rm -f

改行、一重引用符または二重引用符、またはスペースを含むファイル名がある場合、これは間違って動作することに注意してください。 以下のバージョンでは、ファイル名を処理して、一重引用符や二重引用符、スペース、改行を含むファイル名やディレクトリ名が正しく処理されるようにしています。

/ tmp -nameコアタイプを見つけます。 xargs -0 / bin / rm -f

-iオプションの代わりに-Iフラグを使用することもできます。このフラグは、この例のようにコマンド引数の入力行に置き換えられる文字列を指定します。

ls dir1 | xargs -I {} -t mv dir1 / {} dir / {} / code>

置換文字列は "{}"として定義されます。 つまり、コマンド引数の中の "{}"がパイプ演算を通じてargsに転送された入力要素に置き換えられます。 これにより、コマンドの引数の特定の位置に入力要素を配置(繰り返し)することができます。