English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Linux xargs コマンド

Linux コマンド全集

xargs(英語全称:eXtended ARGuments)はコマンドにパラメータを渡すためのフィルタであり、複数のコマンドを組み合わせるツールです。

xargsはパイプラインまたは標準入力(stdin)データをコマンドラインパラメータに変換し、ファイルの出力からデータを読み取ることもできます。

xargsはまた、単一行または複数行のテキスト入力を他の形式に変換することもできます。例えば、複数行を単一行に、単一行を複数行に変換します。

xargsのデフォルトのコマンドはechoで、これはxargsにパイプラインを通じて渡される入力が改行と空白を含むことを意味しますが、xargsの処理により、改行と空白はスペースに置き換わります。

xargsは強力なコマンドであり、コマンドの出力をキャプチャして、別のコマンドに渡すことができます。

このコマンドを使用できる理由は、多くのコマンドが|パイプを介してパラメータを渡すことをサポートしないが、日常業務で必要な場合があるため、xargsコマンドが作成されたからです。例えば:

find /sbin -perm +700 |ls -l これは誤りです
find /sbin -perm +700 |xargs ls -l これが正しい方法です

xargsは通常パイプラインと一緒に使用されます。

コマンド形式:

somecommand |xargs -item コマンド

引数:

  • -a ファイルからstdinとして読み込む

  • -e フラグ、時には-E フラグはスペースで区切られたフラグで、xargsがflagフラグを含むものを解析したら停止します。

  • -p 毎回argumentを実行するたびにユーザーに尋ねます。

  • -n num後ろに数を追加して、コマンドが実行される際に一度に使用するargumentの数を指定します、デフォルトはすべてを使用します。

  • -tはまずコマンドを印刷し、その後実行することを意味します。

  • -iまたは-I、これはlinuxがサポートしているかどうかによる、xargsの各項目の名前は、一般的には一行ごとに{}に割り当てられます、{}で置き換えることができます。

  • -r no-run-if-emptyxargsの入力が空の場合はxargsを停止し、実行しないでください。

  • -s numコマンドラインの最大文字数、これはxargsの後の命令の最大コマンドライン文字数を指します。

  • -L num標準入力から一度にnum行読み取り、commandコマンドに送ります。

  • -l  同 -L。

  • -d delim区切り文字、デフォルトのxargs区切り文字は改行、argumentの区切り文字はスペース、ここではxargsの区切り文字を変更しています。

  • -x exitの意味は、主に-sを使用。。

  • -P最大のプロセス数を変更します、デフォルトは1、0の場合はas many as it can、この例は考えると考えられないかもしれませんが、普段は使われないでしょう。

オンラインサンプル

xargsは置き換えツールとして、入力データを読み取り、再フォーマットして出力します。

テストファイルを定義し、複数行のテキストデータを含む:

# cat test.txt
a b c d e f g
h i j k l m n
o p q
r s t
u v w x y z

多行入力から単一行出力:

# cat test.txt | xargs
a b c d e f g h i j k l m n o p q r s t u v w x y z

-nオプションで多行出力:

# cat test.txt | xargs -n3
a b c
d e f
g h i
j k l
m n o
p q r
s t u
v w x
y z

-dオプションで定界符をカスタマイズできます:

# echo "nameXnameXnameXname" | xargs -dX
name name name name

組み合わせ -nオプションの使用:

# echo "nameXnameXnameXname" | xargs -dX -n2
name name
name name

stdinから読み取り、フォーマットされた引数をコマンドに渡す。

コマンドsk.shと引数を保存するファイルarg.txtを仮定して:

#!/bin/bash
#sk.shコマンドの内容、すべての引数を表示する。
echo$*

arg.txtファイルの内容:

# cat arg.txt
aaa
bbb
ccc

xargsのオプション -I,使用 -I は置換文字列 {} を指定します。この文字列は xargs の拡張時に置き換えられます。 -I と xargs を組み合わせて使用すると、各パラメータコマンドが一度だけ実行されます:

# cat arg.txt | xargs -I {} ./sk.sh -p {} -l
-p aaa -l
-p bbb -l
-p ccc -l

すべての画像ファイルをコピーして、 /data/images ディレクトリ下:

ls *.jpg | xargs -n1 -I {} cp {} /data/images

xargs と find を組み合わせて使用する

rm で多くのファイルを削除するときは、エラーメッセージを受け取る可能性があります:/bin/rm Argument list too long. xargs を使用してこの問題を避けます:

find . -type f -name "*.log" -print0 | xargs -0 rm -f

xargs -0 は \0 を区切り文字として使用します。

ソースコードディレクトリ内のすべての php ファイルの行数を計算します:

find . -type f -name "*.php" -print0 | xargs -0 wc -l

すべての jpg ファイルを検索して、それらを圧縮します:

find . -type f -name "*.jpg" -print | xargs tar -czvf images.tar.gz

xargs の他の応用

もしあなたがダウンロードしたい URLがたくさん含まれているファイルを持っている場合、すべてのリンクを xargs でダウンロードすることができます:

# cat url-list.txt | xargs wget -c

Linux コマンド全集