Par défaut, cpteste si son dernier argument est un répertoire existant. Si cela se produit, cpcré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 wibbles'agit d'un répertoire existant, cpcopie la source dans wibble/bar. Si wibblen'existe pas, cplie 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 cpsuccès, vous pouvez être sûr que la copie est appelée wibble. S'il wibbleexistait 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 mvet 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 -Tle 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-directoryoption [out] : tant que j'utilise --recursive, tout va bien [aveccoreutils 8.12sous GNU / Linux]. La principale différence semble être qu'avec--no-target-directoryle contenu mais pas le répertoire lui-même est copié [recherche toujours en cours]