Linux – xargs コマンドの使い方を詳しく解説

目次

概要

xargs コマンドは、Linux や Unix 系システムで広く使用される強力なコマンドラインユーティリティです。 本記事では、xargs コマンドの基本的な使い方から応用例までを詳しく解説します。

基本的な使い方

標準入力から引数を渡す

最も基本的な使い方は、標準入力から引数を読み取り、それを他のコマンドに渡す方法です。 デフォルトでは、空白文字が区切り文字になります。

echo "file1 file2 file3" | xargs rm

この例では、echo コマンドで出力された文字列を xargs が受け取り、rm コマンドに引数として渡します。 結果として、file1file2file3 が削除されます。

-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

コメント

コメントする

目次