Linux / UNIXのxargsコマンドは、空白または改行で区切られた標準入力から項目を読み取り、初期引数を指定してコマンドを1回以上実行します。
xargsの引数としてコマンドが指定されていない場合、ツールが実行するデフォルトのコマンドはエコーです。
標準入力の空白行は無視されます。これらのxargsが標準入力から読み取る項目は、二重引用符または一重引用符、または円記号で保護できます。
xargsコマンドは、特にgrepやechoなどのコマンドと組み合わせると非常に強力です。このチュートリアルでは、xargsコマンドを使い始めるためのいくつかの基本的な使用法について説明します。
Linuxxargsコマンド構文
xargsコマンドの構文は次のとおりです。
xargs [options] [command [initial-arguments]]
コマンドman xargs
を呼び出すと、すべてのオプションと引数を表示できます。 ターミナルから。次のセクションでは、argsコマンドの例をいくつか示します。
Linuxxargsの簡単な例
コマンドを指定しないxargsコマンドは、標準入力の引数をエコーします。次の例では、lsコマンドからの出力がxargsコマンドにパイプされ、コマンドなしのxargsコマンドが標準入力のファイルリストをエコーします。
# ls | xargs
Xargsの例1.a
次の例は、echoコマンドの出力がxargsにパイプされ、xargsコマンドがパイプされた引数を使用してmkdir
を使用してフォルダーを作成する方法を示しています。 。
# echo 'one two three' | xargs mkdir
Xargsの例1.b
引数の数を制限する
xargsに渡される引数の数は、システムの制限によって定義されます。 -n
switchは、特定のコマンドに渡される引数の数を制限します。 xargsコマンドはn
で継続的に実行されます すべての引数がなくなるまでの引数の数。
次の例では、標準入力から読み取られる引数の数を2に制限しています。Xargsコマンドは、すべての引数の読み取りが完了するまで、一度に2つの引数の読み取りを続行します。さらに、-t
オプションは、コマンドを実行する前に標準出力に出力します。
# echo "file1 file2 file3 file4 file5" | xargs -n 2 -t touch
Xargsの例2
実行前にユーザープロンプトを有効にする
-p
のxargs オプションは、コマンドの実行前にユーザーにプロンプトを表示します。次の例は、xargsコマンドが、各引数でフォルダーの作成を続行する前に、ユーザーに「Y」または「N」のいずれかを求めるプロンプトを表示することを示しています。
# echo Hello World | xargs -p mkdir
# echo one two three | xargs -p -n 1 mkdir
Xargsの例3
findおよびxargsコマンドを使用してファイルを削除する
xargsの最も一般的な使用法の1つは、findコマンドで使用することです。 findコマンドを実行した後、一連のファイルを削除または名前変更する状況を考えてみます。ここでは、findコマンドとxargsコマンドの両方を、特定の属性に一致するファイルで一緒に使用して、一度に削除または名前変更することができます。
たとえば、/tmp
内のすべてのファイルを削除するとします。 過去5分以内に作成されたフォルダ。 xargsを使用してこれを行うには、まず、find
を使用して、選択した基準に一致するすべてのファイルを見つけます。 コマンドを実行してから、出力をxargsコマンドにパイプします。xargsコマンドはrm
を使用します。 それらを削除するコマンド。
# find /tmp/* -cmin -5
# find /tmp/* -cmin -5 | xargs -t rm
# find /tmp/* -cmin -5
Xargsの例4
xargsを使用してパターンを検索
Xargsコマンドのもう1つの強力な使用法は、ls
などの別のunixコマンドによって返されるファイルのリストでパターンを検索することです。 またはfind
。次の例は、find
を組み合わせたものです およびxargs
ここで、findコマンドは、現在の作業ディレクトリからすべてのtext(.txt)ファイルを返します。結果、つまりファイル名はxargsコマンドにパイプされ、grep "file"
を使用して「file」という単語を検索します。 。パターンがファイルに存在する場合、パターンを含む行がファイル名とともにターミナルに印刷されます:
# find . -name "*.txt" | xargs grep "file"
Xargsの例5
xargsを使用して複数のコマンドを実行する
これまで、xargsコマンドがパイプ引数を使用して、ファイルのバッチの名前変更、パターンの検索などのさまざまなタスクを実行する方法を見てきました。これらを実行している間、パイプ操作の後に単一のコマンドを使用します。 xargsと一緒に複数のコマンドを実行することも可能です。
たとえば、複数のファイルを作成し、xargsコマンドを使用してそれらを同時に一覧表示する場合は、-I
を指定してxargsコマンドを実行します。 スイッチに続いて、置換文字列を定義します。次に、出現するすべての置換文字列が、xargsに渡された引数に置き換えられます。
# echo "file1 file2 file3" | xargs -t -I % sh -c '{ touch %; ls -l %; }'
Xargsの例6
コマンドを並行して実行する
状況によっては、xargsを使用して、引数ごとに計算集約型のコマンドを呼び出す場合があります。マルチコアマシンを利用することで、コマンドを並行して呼び出すことができます。 -P
switchは、プロセスの最大数を定義することにより、これを正確に実行します。デフォルトでは、プロセスの最大数は1です。
たとえば、次のxargsコマンドは、一度に5つの引数を取ることで、1から30までの数値を出力します。特に、一度に最大8つのプロセスを実行します。
# printf %s\\n {1..30} | xargs -n 5 -P 8
Xargsの例7
ファイルからの入力を受け入れる
これまで、xargsコマンドの入力は、標準の入力から、またはパイプ操作を介して他のコマンドの出力から読み取られるのを見てきました。ただし、xargsコマンドがファイルから入力を直接読み取ることも可能です。 -a
スイッチを使用すると、xargsに必要な入力用のファイルを定義できます。
次のxargsコマンドは、ファイル(input.txt)から入力を読み取り、touchコマンドを使用してファイルを作成します。
# cat input.txt
one.txt
two.txt
# xargs -a input.txt touch
Xargsの例8
概要
それで全部です! XARGSコマンドのいくつかの基本的な使用法について説明しましたが、XARGSのより高度な機能を試して、強力なコマンドを作成できるようになりました。投稿が気に入っていただけたら幸いです。読んでいただきありがとうございます。