xargsコマンドは通常、あるコマンドの出力が入力引数として別のコマンドに渡されるコマンドラインで使用されます。
多くの場合、 "パイプ"と "リダイレクション"演算子は同じ型のトランザクションを実行するため、xargsなどの特別なコマンドは必要ありません。しかし、引数がスペースを含んでいて、xargsが克服するなど、基本的な配管とリダイレクションのメカニズムに問題があることがあります。
さらに、xargsは、指定されたすべての引数を処理するために、必要に応じて指定されたコマンドを繰り返し実行します。実際には、xargsが指定されたコマンドを実行するたびに、標準入力ストリームから読み込む引数の数を指定できます。
一般に、xargsコマンドは、データがストリーミングされる第2のコマンド(パイプ演算子「|」を使用)のオプションまたは引数の一部として1つのコマンドの出力を使用する場合に使用する必要があります。データが第2のコマンドの(標準)入力であることを意図している場合、通常の配管で十分である。
たとえば、lsコマンドを使用してファイル名とディレクトリのリストを生成し、このリストをechoを実行するxargsコマンドにパイプすると、次のように各繰り返しでechoによって処理されるファイル名またはディレクトリ名の数を指定できます:
ls | xargs -n 5エコー
この場合、エコーは一度に5つのファイル名またはディレクトリ名を受け取ります。 echoは最後に改行文字を追加するので、各行に5つの名前が書き込まれます。
さらなる処理のために別のコマンドに渡される大きくて予測できない数値項目(ファイル名など)を返すコマンドを実行する場合、過負荷とクラッシュを避けるために第2のコマンドが受け取る引数の最大数を制御することをお勧めします。
次のコマンドラインは、200のグループを見つけることによって生成されたファイル名のストリームを、cpコマンドに渡す前に分割します。 バックアップ ディレクトリ。
./-タイプf -name "* .txt" -print | xargs -l200 -i cp -f {} ./backup
findコマンドの "./"要素は、検索するカレントディレクトリを指定します。 "-type"引数はファイルへの検索を制限し、 "-name" * .txt "フラグは" .txt "拡張子を持たないものをさらにフィルタリングします。 -私 xargsのフラグは、 {} 表記は、蒸気の各ファイル名を表します。
次のコマンドは、/ tmpディレクトリ以下のcoreという名前のファイルを検索し、削除します。
find / tmp -nameコアタイプf -print | xargs / bin / rm -f
改行、一重引用符または二重引用符、またはスペースを含むファイル名がある場合、これは間違って動作することに注意してください。以下のバージョンでは、ファイル名を処理して、一重引用符や二重引用符、スペース、改行を含むファイル名やディレクトリ名が正しく処理されるようにしています。
/ tmp -nameコアタイプを見つけます。 xargs -0 / bin / rm -f
代わりに -私 オプションを使用することもできます -私 この例のようにコマンド引数で入力行に置き換えられる文字列を指定するflag:
ls dir1 | xargs -I {} -t mv dir1 / {} dir / {} / code>
置換文字列は "{}"として定義されます。つまり、コマンド引数の中の "{}"がパイプ演算を通じてargsに転送された入力要素に置き換えられます。これにより、コマンドの引数の特定の位置に入力要素を配置(繰り返し)することができます。




