質問:の使い方を示すために簡単な例が必要ですcp --no-target-directory
。
私はそれを理解するのに少し苦労しましたcp --no-target-directory
。わかりました。説明mv --no-target-directory
しかし、私はそれを使用する方法を本当に想像することはできませんcp
。
たとえば、コマンドが
mv /tmp/source /tmp/dest
成功しても名前が次に変更されるという保証はありません/tmp/source
。別のプロセスでディレクトリを作成した場合は、名前が/tmp/dest
変更された可能性があります。しかし、成功すれば/tmp/dest`は問題になりません。 (/tmp/dest/source
/tmp/dest
mv -T /tmp/source /tmp/dest
/tmp/source was renamed to
源泉)
ベストアンサー1
デフォルトでは、cp
最後の引数が既存のディレクトリであるかどうかをテストします。これが発生すると、cp
そのディレクトリ内にソースのデフォルト名を含むリンクが生成されます。つまり、コマンドが与えられると
cp foo/bar wibble
wibble
存在する場合は、cp
ソースをディレクトリにコピーしますwibble/bar
。wibble
存在しない場合は、cp
ソースをディレクトリにリンクしますwibble
。
コピーを常に使用できるようにするには、(エイリアス)オプションをwibble
指定できます。これにより、成功した場合にコピーが呼び出されたことを確認できます。すでにディレクトリとして存在すると失敗します。--no-target-directory
-T
cp
wibble
wibble
cp
表形式:
The target is … Without -T With -T
existing directory copy in the directory error
existing file (not dir) overwrite overwrite
does not exist create create
唯一の違いは、-T
ターゲットが既存のディレクトリの場合、コマンドがエラーを返すことです。これは、ディレクトリが存在しないと予想する場合に便利です。予期しないことが発生するのではなく、エラーメッセージが表示されます。
mv
にも同様に適用されますln
。宛先が既存のディレクトリの場合は、他の操作を-T
自動的に実行するのではなくエラー信号を送信します。
の場合はcp
状況が異なります。再帰コピーを実行し、ソースがディレクトリの場合、ソースcp -T
自体ではなくソースコンテンツがターゲットにコピーされます。言い換えれば、
$ tree source destination
source
└── foo
destination
└── bar
それから
$ cp -rv source destination
`source' -> `destination/source'
`source/foo' -> `destination/source/foo'
しかし、
% cp -rvT source destination
`source/foo' -> `destination/foo'