[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つの引数として安全に渡せます。
参考
- GNU Findutils Manual - xargs options: https://www.gnu.org/software/findutils/manual/html_node/find_html/xargs-options.html
- GNU Findutils Manual - Print File Name: https://www.gnu.org/software/findutils/manual/html_node/find_html/Print-File-Name.html