xargs コマンドは、標準入力で受け取ったデータをコマンドの引数として渡す ためのコマンドです。
大量のファイルやリストを他のコマンドに効率よく処理させるときに利用されます。
構文(Syntax)
xargs [オプション] [コマンド [初期引数]]
主なオプション一覧
| オプション | 説明 | 使用例 |
|---|---|---|
| (なし) | 標準入力をスペース/改行区切りで引数に変換 | `echo “a b c” |
-n N | 1回のコマンド実行で使う引数の数を指定 | `echo “1 2 3 4” |
-d DELIM | 区切り文字を指定 | `echo “a,b,c” |
-0 | 区切りを NUL 文字に(find -print0 と組み合わせる) | `find . -name “*.txt” -print0 |
-I REPLACE | 置換文字列を指定してコマンドに埋め込み | `echo “file1 file2” |
-p | 実行前に確認プロンプトを表示 | `echo “a b” |
-t | 実行するコマンドを表示してから実行 | `echo “a b” |
-r | 入力が空の場合はコマンドを実行しない | `echo “” |
実行例
単純な引数変換
echo "file1 file2 file3" | xargs echo
出力例:
file1 file2 file3
2つずつ引数にしてコマンド実行
echo "1 2 3 4" | xargs -n 2 echo
出力例:
1 2
3 4
区切り文字を指定して処理
echo "a,b,c" | xargs -d, echo
出力例:
a b c
find と組み合わせて安全に削除
find . -name "*.tmp" -print0 | xargs -0 rm
プレースホルダを使ってコピー
echo "file1 file2" | xargs -n 1 -I{} cp {} /tmp/
実行確認しながら削除
echo "file1 file2" | xargs -p rm
エラー例(空入力で実行される)
echo "" | xargs echo
出力例:
(空でも echo が実行されて改行が出力される)
関連コマンド
find: ファイルを検索し、その結果をxargsに渡して処理parallel: GNU Parallel。xargs より高機能で並列実行が可能grep: パイプで渡すときに併用されることが多い
備考
xargsはスペースや改行を区切りとするが、特殊文字や空白を含むファイル名には注意が必要。
→find -print0 | xargs -0の組み合わせが安全。- デフォルトでは入力が空でもコマンドが実行されるため、不要な実行を避けたい場合は
-rを使う。 - 処理対象が非常に多い場合でも、まとめて実行することでコマンド呼び出しの回数を削減できる。
参考
- manページ: man7.org xargs(1)
- GNU findutils: https://www.gnu.org/software/findutils/

コメント