gnuプログラム(少なくともcp,install, ln,そしてmv)には,このオプションでターゲットディ レクトリの指定を可能にするものもあります.
ほとんどのプログラムのインターフェースは,オプションと有限数の(おそら くゼロの)固定した位置の引数を処理した後,残りの引数リストは空である, または同じように処理される(通常ファイルとなる)項目のリストになっている ことが期待されています.xargsプログラムは,この慣習を用いて より良く動作するように設計されています.
様々な数の引数の最後に特例(すなわち,ターゲットディレクトリ)が
あるため,mvの類のコマンドは普通のものとは言えません.例えば
“全てのファイルをここから../d/に移動する”ような処理を実行する
ために,mv * ../d/
では引数の空間を使い果すかもしれませんし,
ls | xargs ...
では,それぞれの従属コマンドの呼び出しへの特別な
最後の引数を指定する方法がないため,明確ではなくなります.(それは,シェ
ルコマンドで動作させることが可能ですが,人間の労働と能力が余分に必要と
なります.)
--target-directoryオプションによって,cp,
install,ln,そしてmvプログラムで,
xargsを用いて便利に使用することが可能になります.例えば,現
在のディレクトリから同じ階層のディレクトリ,ここではd
に,ファイ
ルを移動することが可能です.(しかし,これは‘.’で始まる名前のファ
イルを移動しません.)
ls |xargs mv --target-directory=../d
gnu findプログラムを使用している場合,以下のコマンドで 全てのファイルを移動することが可能です.
find . -mindepth 1 -maxdepth 1 \ | xargs mv --target-directory=../d
しかし,現在のディレクトリにファイルがない場合や,改行文字を含む名前の ファイルがある場合,それは失敗するでしょう.以下の例は,これらの制限を 取り除きますが,gnu findとgnu xargsの両 方を必要とします.
find . -mindepth 1 -maxdepth 1 -print0 \ | xargs --null --no-run-if-empty \ mv --target-directory=../d