概要
xargs
コマンドは、Linux や Unix 系システムで広く使用される強力なコマンドラインユーティリティです。
本記事では、xargs
コマンドの基本的な使い方から応用例までを詳しく解説します。
基本的な使い方
標準入力から引数を渡す
最も基本的な使い方は、標準入力から引数を読み取り、それを他のコマンドに渡す方法です。 デフォルトでは、空白文字が区切り文字になります。
echo "file1 file2 file3" | xargs rm
この例では、echo
コマンドで出力された文字列を xargs
が受け取り、rm
コマンドに引数として渡します。
結果として、file1
、file2
、file3
が削除されます。
-a
オプション: ファイルから引数を渡す
xargs
コマンドは、ファイルから読み取った内容を引数として渡すこともできます。
xargs -a filelist.txt rm
この例では、filelist.txt
にリストされたファイルを rm
コマンドで削除します。filelist.txt
の内容は以下のようになっています:
file1
file2
file3
オプション
以下が xargs のオプションです:
オプション | 説明 |
---|---|
-0, --null |
入力ストリーム内の文字列をヌル文字で区切る |
-a, --arg-file=FILE |
標準入力ではなく、FILE から引数を読み取る |
-d, --delimiter=CHARACTER |
入力ストリーム内の文字列を CHARACTER で区切る |
-E END |
EOF を表す文字列 END を設定する。END が入力行として現れると、それ以降の入力を無視する。 |
-i, --replace[=R], -I R |
標準入力から読み取った名前で ARGS 内の R を置換する。R が指定されていない場合は{}を仮定する。 |
-L, --max-lines=MAX-LINES |
コマンドに渡す引数の最大行数を指定する |
-n, --max-args=MAX-ARGS |
コマンドに渡す引数の最大数を指定する |
-o, --open-tty |
コマンドの実行前に子プロセスで stdin を /dev/tty として再オープンする |
-p, --interactive |
コマンドを実行する前にプロンプトを表示する |
-P, --max-procs=MAX-PROCS |
一度に最大 MAX-PROCS のプロセスを実行する |
-r, --no-run-if-empty |
引数がない場合はコマンドを実行しない |
-s, --max-chars=MAX-CHARS |
コマンドラインの長さを最大 MAX-CHARS に制限する |
-t, --verbose |
実行するコマンドを表示する |
-x, --exit |
-s オプションで指定したサイズを超過した場合に終了する |
--process-slot-var=VAR |
子プロセス内で環境変数 VAR を設定する |
--show-limits |
コマンドラインの長さの制限を表示する。 |
-t
オプション: 実行されるコマンドを確認する
-t
オプションを指定すると、実行されるコマンドを確認できます。
デバッグする際に使用します。
$ echo "file1 file2 file3" | xargs -n 1 -t echo
echo file1
file1
echo file2
file2
echo file3
file3
-n
オプション: 引数の最大数を指定する
-n
オプションを指定すると、引数の最大数を指定します。
$ echo "file1 file2 file3" | xargs -n 1 echo
file1
file2
file3
-P
オプション: 並列実行する
-P
オプションを指定すると、引数に渡されたコマンドをマルチプロセスで並列実行します。
ls *.log | xargs -P 4 -n 1 gzip
この例では、すべての .log
ファイルを 4 つの並列プロセスで gzip
コマンドを使用して圧縮します。
-I
オプション: 特定の文字列を引数として使用する
-I
オプションでプレースホルダを指定すると、引数に渡されたコマンドのプレースホルダに対して読み取った引数を挿入します。
echo "file1 file2 file3" | xargs -I {} echo "Processing file: {}"
この例では、echo "Processing file: {}"
の {}
の箇所に渡された引数を挿入してコマンドを実行します。
-d
オプション: 区切り文字を変更する
引数の区切り文字はデフォルトで空白になっています。空白以外の場合は -d
オプションで指定します。
echo "file1,file2,file3" | xargs -d, echo
-0
オプション: 区切り文字をヌル文字にする
例えば、find で検索して出力されたパスの一覧を引数として使用したい場合、ファイル名に空白が含まれていると正しく区切ることができません。
そのため、find で -print0
を指定して出力の区切り文字をヌル文字にし、xargs
で -0
オプションを指定して区切り文字をヌル文字として設定することで正しく処理できます。
find *.sh -print0 | xargs -0 -n1 echo
コメント