[Shell command] xargs -0 で空白を含む文字列を安全に扱う

作成日: 2026年10月03日

xargs -0 を使用すると、入力を改行や空白ではなく NUL 文字で区切って引数として扱えます。

下記の例では、空白を含む apple pie.txt を1つの引数として処理します。

printf '%s\0' 'apple pie.txt' 'orange.txt' |
  xargs -0 -n 1 printf 'file=%s\n'

実行結果は下記のとおりです。

file=apple pie.txt
file=orange.txt

printf '%s\0' の %s には、後ろに指定した文字列が順番に入ります。\0 は NUL 文字を表すため、この例では apple pie.txt と orange.txt をそれぞれ NUL 文字で区切って出力しています。

xargs の -0 は --null と同じ意味で、入力の区切り文字を NUL 文字として扱うオプションです。そのため、ファイル名に空白や改行が含まれていても、それらを引数の区切りとして扱いません。

-n 1 は、1回のコマンド実行に1つの引数を渡す指定です。

ファイル名に空白や改行などが含まれる可能性がある場合は、find -print0 と組み合わせると、ファイル名を途中で分割せずに xargs へ渡せます。

find . -type f -print0 |
  xargs -0 -n 1 printf 'file=%s\n'

find の -print0 は、検索したファイル名の末尾に改行ではなく NUL 文字を付けて出力するオプションです。xargs -0 と組み合わせることで、空白や改行を含むファイル名も1つの引数として安全に渡せます。

参考

Shell command xargs