103.4標準
標準入力の各ファイル名をcpのコピー元にする。
コピー先backup/を末尾に置き、各項目についてcp ITEM backup/を実行する。ファイル名に改行はない。
適切なxargs指定はどれか。
× 不正解
xargs -I REPLACEは入力項目を指定文字列の位置へ置換する。引数の末尾以外へ値を配置したい場合に使える。
詳細解説
誤り
xargs cp backup/入力項目が末尾へ追加され、backup/がコピー元の位置になる。
入力項目がbackup/の後ろへ付き、cpの引数順が変わる。
正しい
xargs -I{} cp '{}' backup/各入力行を{}へ置換し、コピー元とコピー先を所定位置に置く。
正解。各項目をコピー元の位置へ配置する。
誤り
xargs -n 1 backup/ cpbackup/をコマンド名として実行しようとする。
backup/をコマンド名として扱う。
誤り
xargs cp '{}' backup/-Iがないため{}は置換されず、リテラルの引数として残る。
{}を置換する設定がない。
実際に確かめる
一時的な検証環境で実行できる例です。
printf 'one
two
' | xargs -I{} printf '<%s>
' '{}'期待される結果
<one>
<two>理解のポイント
- -Iで置換記号を定義
- 入力ごとにコマンドを実行
- 引用して引数境界を保つ
確認時の注意
- 確認環境: GNU findutils 4.x
基礎のおさらい
実行回数
GNU xargsの-Iは通常、入力の論理行ごとにコマンドを実行する。
ファイル名の安全性
改行を含む名前まで扱うなら、find -print0とxargs -0を使い、置換が本当に必要かも検討する。
問題IDKP-103-075
確認環境GNU findutils 4.x
最終技術確認2026-08-12
誤り・権利侵害を報告