Secara default, cp
menguji apakah argumen terakhirnya adalah direktori yang ada. Jika ini terjadi, cp
buat tautan di dalam direktori itu, dengan nama dasar sumber. Artinya, diberi perintah
cp foo/bar wibble
jika wibble
direktori yang ada maka cp
salin sumber ke wibble/bar
. Jika wibble
tidak ada maka cp
tautkan sumber ke wibble
.
Jika Anda ingin memastikan bahwa salinannya selalu wibble
, maka Anda dapat menentukan opsi --no-target-directory
(alias -T
). Dengan begitu, jika cp
berhasil, Anda dapat yakin bahwa salinannya dipanggil wibble
. Jika wibble
sudah ada sebagai direktori, maka cp
akan gagal.
Dalam bentuk tabel:
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
Satu-satunya perbedaan adalah bahwa dengan -T
, jika targetnya adalah direktori yang ada, perintah mengembalikan kesalahan. Ini berguna ketika Anda mengharapkan direktori tidak ada: Anda mendapatkan pesan kesalahan alih-alih sesuatu yang tidak terduga terjadi.
Hal yang sama berlaku untuk mv
dan ln
. Jika targetnya adalah direktori yang sudah ada, dengan -T
, mereka menandakan kesalahan daripada diam-diam melakukan sesuatu yang berbeda.
Dengan cp
, ada kasus berbeda. Jika Anda melakukan salinan rekursif dan sumbernya adalah direktori, maka cp -T
salin konten sumber ke tujuan, daripada menyalin sumber itu sendiri. Itu, diberikan
$ tree source destination
source
└── foo
destination
└── bar
kemudian
$ cp -rv source destination
`source' -> `destination/source'
`source/foo' -> `destination/source/foo'
sedangkan
% cp -rvT source destination
`source/foo' -> `destination/foo'
--no-target-directory
opsi [keluar] : selama saya menggunakan --recursive, semuanya baik-baik saja [dengancoreutils 8.12
GNU / Linux]. Perbedaan utama tampaknya adalah bahwa dengan--no-target-directory
konten tetapi tidak direktori itu sendiri disalin [penelitian masih berlangsung]