1.03.3標準
current以下の通常ファイルをfindで列挙し、ファイル名に空白や改行があっても境界を保ってprintfへ渡す。
NUL区切りを使用する。
適切な組合せはどれか。
× 不正解
find -print0とxargs -0はNULを項目区切りとして共有し、空白や改行を含むパス名の境界を保持する。
詳細解説
正しい
find current -type f -print0 | xargs -0 printf '<%s>\n'findがNULで区切り、xargs -0が同じ区切りを解釈する。
正しい。ファイル名に使用できないNULを境界にするため、空白と改行をデータとして保持できる。
誤り
find current -type f -print | xargs -0 printf '<%s>\n'findは改行区切りなのにxargsはNULを待つため対応しない。
誤り。findの各行末LFをxargs -0は区切りと認識せず、複数パスが1項目へ混ざり得る。
誤り
find current -type f -print0 | xargs printf '<%s>\n'xargs側が既定の空白区切りを使い、NULを正しく項目境界として扱わない。
誤り。xargs側へ-0がないため、NULを期待する対応関係が壊れる。
誤り
find current -type f | printf '<%s>\n'printfは標準入力を引数として読まず、検索結果を表示しない。
誤り。printfへ渡るのはformat引数だけで、パイプのbyte streamをファイル名引数として処理しない。
実際に確かめる
一時的な検証環境で実行できる例です。
tmp=$(mktemp -d); touch "$tmp/a b"; find "$tmp" -type f -print0 | xargs -0 -n1 basename; rm -rf "$tmp"期待される結果
a b(1つの引数として表示)理解のポイント
- NULはpath内に現れない
- -print0と-0を対で使用
- newline区切りは曖昧
確認時の注意
- 確認環境: GNU findutils 4.x / 一時ファイル
基礎のおさらい
Unixパスの制約
パス要素にはNULを含められないため、安全な区切りとして利用できる。
代替-exec
find -exec command {} +も、パス境界を保持してまとめて引数へ渡せる。
問題IDKL-101-478
確認環境GNU findutils 4.x / 一時ファイル
最終技術確認2026-08-13
誤り・権利侵害を報告