【エックスアーグズ】
xargs とは?
最終更新:
💡 標準入力の項目を、実行するコマンドの引数にする
標準入力で受け取った項目をコマンドの引数に組み立て、実行するコマンド。入力をまとめたり分割したりして1回以上実行する。通常は空白・改行や引用の規則で区切るため、空白などを含むファイル名を扱う場合はNUL区切りの入力と-0を組み合わせる。
📌 このページのポイント
パイプだけでは足りないの?
簡単な例は?
GNU xargsの例なら、`printf '%s\0' 'a b.txt' 'c.txt' | xargs -0 -r -n 1 printf '%s\n'` で名前を表示できるよ。NULで区切った2項目を、1回につき1項目ずつ渡すので、空白入りのa b.txtも1つの名前として表示される。
普通の改行区切りではだめ?
既定では空白・改行で区切り、引用符やバックスラッシュにも意味があるよ。名前自体にそうした文字が含まれると意図と違って分かれる場合がある。ファイル一覧なら `find` の `-print0` とxargsの `-0` を組み合わせる方法があるんだ。
-rや-Iは何?
並列なら必ず速い?
GNU版では `-P 4` で最大4プロセスを同時に実行できるよ。`-n` などで複数の実行へ分けて使う。ただし処理や資源によって効果は変わり、出力の順番も保証されない。共有ファイルへ同時に書く場合などは競合にも注意しよう。
📖 おまけ:英語の意味
「xargs」 = 入力から引数を組み立てるコマンド名
💬 argsはarguments(引数)を表す略語だよ。標準入力で渡された一覧を、別のコマンドへ渡す引数に組み立てる働きを名前と結び付けて覚えよう。