xargs – 標準入力を引数としてコマンドに渡すコマンド

パイプ/リダイレクト

xargs コマンドは、標準入力で受け取ったデータをコマンドの引数として渡す ためのコマンドです。
大量のファイルやリストを他のコマンドに効率よく処理させるときに利用されます。

構文(Syntax)

xargs [オプション] [コマンド [初期引数]]

主なオプション一覧

オプション説明使用例
(なし)標準入力をスペース/改行区切りで引数に変換`echo “a b c”
-n N1回のコマンド実行で使う引数の数を指定`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 を使う。
  • 処理対象が非常に多い場合でも、まとめて実行することでコマンド呼び出しの回数を削減できる。

参考

Bash玄

はじめまして!Bash玄です。

エンジニアとしてシステム運用に携わる中で、手作業の多さに限界を感じ、Bashスクリプトを活用して業務を効率化したのがきっかけで、この道に入りました。「手作業は負け」「スクリプトはシンプルに」をモットーに、誰でも実践できるBashスクリプトの書き方を発信しています。

このサイトでは、Bashの基礎から実践的なスクリプト作成まで、初心者でもわかりやすく解説しています。少しでも「Bashって便利だな」と思ってもらえたら嬉しいです!

# 好きなこと
- シンプルなコードを書くこと
- コマンドラインを快適にカスタマイズすること
- 自動化で時間を生み出すこと

# このサイトを読んでほしい人
- Bashに興味があるけど、何から始めればいいかわからない人
- 定型業務を自動化したい人
- 効率よくターミナルを使いこなしたい人

Bashの世界に一歩踏み出して、一緒に「Bash道」を極めていきましょう!

Bash玄をフォローする

コメント