Por defecto, cpprueba si su último argumento es un directorio existente. Si esto sucede, cpcrea un enlace dentro de ese directorio, con el nombre base de la fuente. Es decir, dado el comando
cp foo/bar wibble
si wibblees un directorio existente, cpcopia la fuente en wibble/bar. Si wibbleno existe, cpvincula la fuente a wibble.
Si desea asegurarse de que la copia sea siempre wibble, puede especificar la opción --no-target-directory(alias -T). De esa manera, si cptiene éxito, puede estar seguro de que se llama a la copia wibble. Si wibbleya existía como directorio, entonces cpfallará.
En forma tabular:
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 única diferencia es que -T, en caso de que el destino sea un directorio existente, el comando devuelve un error. Esto es útil cuando espera que el directorio no exista: recibe un mensaje de error en lugar de que ocurra algo imprevisto.
Lo mismo se aplica a mvy ln. Si el objetivo es un directorio existente, con -T, señalan un error en lugar de hacer algo diferente en silencio.
Con cp, hay un caso diferente. Si realiza una copia recursiva y la fuente es un directorio, cp -Tcopia el contenido de la fuente en el destino, en lugar de copiar la fuente misma. Es decir, dado
$ tree source destination
source
└── foo
destination
└── bar
entonces
$ cp -rv source destination
`source' -> `destination/source'
`source/foo' -> `destination/source/foo'
mientras
% cp -rvT source destination
`source/foo' -> `destination/foo'
--no-target-directoryopción [out] : siempre que use --recursive, todo está bien [concoreutils 8.12GNU / Linux]. La principal diferencia parece ser que con--no-target-directoryel contenido, pero no con el directorio en sí mismo, se copia [investigación aún en curso]