Par défaut, cp
teste si son dernier argument est un répertoire existant. Si cela se produit, cp
crée un lien dans ce répertoire, avec le nom de base de la source. Autrement dit, étant donné la commande
cp foo/bar wibble
s'il wibble
s'agit d'un répertoire existant, cp
copie la source dans wibble/bar
. Si wibble
n'existe pas, cp
lie la source à wibble
.
Si vous voulez être sûr que la copie est toujours wibble
, vous pouvez spécifier l' option --no-target-directory
(alias -T
). De cette façon, en cas de cp
succès, vous pouvez être sûr que la copie est appelée wibble
. S'il wibble
existait déjà en tant que répertoire, il cp
échouera.
Sous forme de tableau:
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
La seule différence est qu'avec -T
, dans le cas où la cible est un répertoire existant, la commande renvoie une erreur. Ceci est utile lorsque vous vous attendez à ce que le répertoire n'existe pas: vous obtenez un message d'erreur au lieu de quelque chose d'imprévu.
Il en va de même pour mv
et ln
. Si la cible est un répertoire existant, avec -T
, ils signalent une erreur plutôt que de faire silencieusement quelque chose de différent.
Avec cp
, il y a un cas différent. Si vous effectuez une copie récursive et que la source est un répertoire, copiez cp -T
le contenu de la source dans la destination, plutôt que de copier la source elle-même. Autrement dit, étant donné
$ tree source destination
source
└── foo
destination
└── bar
puis
$ cp -rv source destination
`source' -> `destination/source'
`source/foo' -> `destination/source/foo'
tandis que
% cp -rvT source destination
`source/foo' -> `destination/foo'
--no-target-directory
option [out] : tant que j'utilise --recursive, tout va bien [aveccoreutils 8.12
sous GNU / Linux]. La principale différence semble être qu'avec--no-target-directory
le contenu mais pas le répertoire lui-même est copié [recherche toujours en cours]