Pourquoi certaines commandes GNU Coreutils ont-elles l' -T/--no-target-directoryoption? Il semble que tout ce qu'il fait peut être réalisé en utilisant la sémantique de .(self dot) dans une hiérarchie de répertoires Unix traditionnelle.
Considérant:
cp -rT /this/source dir
L' -Toption empêche la copie de créer un dir/sourcesous - répertoire. Il /this/sourceest plutôt identifié avec diret le contenu est cartographié entre les arbres en conséquence. Ainsi, par exemple, /this/source/foo.cva à dir/foo.cet ainsi de suite, plutôt qu'à dir/source/foo.c.
Mais cela peut être facilement accompli sans l' -Toption en utilisant:
cp -r /this/source/. dir # Probably worked fine since dawn of Unix?
Sémantiquement, le composant de point de fin est copié en tant qu'enfant de dir, mais bien sûr cet "enfant" existe déjà (donc n'a pas besoin d'être créé) et est en fait dirlui-même, donc l'effet /this/pathest identifié avec dir.
Cela fonctionne très bien si le répertoire courant est la cible:
cp -r /this/tree/node/. . # node's children go to current dir
Y at - il quelque chose que vous pouvez faire seulement avec -Tqui peut rationaliser son existence? (Outre la prise en charge des systèmes d'exploitation qui n'implémentent pas le répertoire dot, une justification non mentionnée dans la documentation.)
Le point ci-dessus ne résout-il pas les mêmes conditions de concurrence que celles mentionnées dans la documentation GNU Info -T?
.astuce fait le travail lors de la copie d' un fichier, mais pas lors du renommage son nom de base en même temps!cp /path/to/file /target/dir/.S'il/target/dir/fileexiste et qu'il s'agit d'un répertoire, vous obtenez le même diagnostic! Mais vous avez montré ce-Tque cela ne peut pas être fait sans lui en une seule étape, sans conditions de concurrence: copiez un fichier et changez son nom sans qu'il soit shunté dans un sous-répertoire.