Next: , Previous: Block size, Up: Common options


2.4 ターゲットディレクトリ

gnuプログラム(少なくともcpinstallln,そしてmv)には,このオプションでターゲットディ レクトリの指定を可能にするものもあります.

--target-directory=directory
対象となるdirectoryを指定します.

ほとんどのプログラムのインターフェースは,オプションと有限数の(おそら くゼロの)固定した位置の引数を処理した後,残りの引数リストは空である, または同じように処理される(通常ファイルとなる)項目のリストになっている ことが期待されています.xargsプログラムは,この慣習を用いて より良く動作するように設計されています.

様々な数の引数の最後に特例(すなわち,ターゲットディレクトリ)が あるため,mvの類のコマンドは普通のものとは言えません.例えば “全てのファイルをここから../d/に移動する”ような処理を実行する ために,mv * ../d/では引数の空間を使い果すかもしれませんし, ls | xargs ...では,それぞれの従属コマンドの呼び出しへの特別な 最後の引数を指定する方法がないため,明確ではなくなります.(それは,シェ ルコマンドで動作させることが可能ですが,人間の労働と能力が余分に必要と なります.)

--target-directoryオプションによって,cpinstallln,そしてmvプログラムで, xargsを用いて便利に使用することが可能になります.例えば,現 在のディレクトリから同じ階層のディレクトリ,ここではdに,ファイ ルを移動することが可能です.(しかし,これは‘.’で始まる名前のファ イルを移動しません.)

          ls |xargs mv --target-directory=../d

gnu findプログラムを使用している場合,以下のコマンドで 全てのファイルを移動することが可能です.

          find . -mindepth 1 -maxdepth 1 \
            | xargs mv --target-directory=../d

しかし,現在のディレクトリにファイルがない場合や,改行文字を含む名前の ファイルがある場合,それは失敗するでしょう.以下の例は,これらの制限を 取り除きますが,gnu findgnu xargsの両 方を必要とします.

          find . -mindepth 1 -maxdepth 1 -print0 \
            | xargs --null --no-run-if-empty \
                mv --target-directory=../d