Perché alcuni comandi GNU Coreutils hanno l' -T/--no-target-directoryopzione? Sembra che tutto ciò che fa possa essere raggiunto usando la semantica del .(self dot) in una gerarchia di directory Unix tradizionale.
Considerando:
cp -rT /this/source dir
L' -Topzione impedisce alla copia di creare una dir/sourcesottodirectory. Piuttosto /this/sourceviene identificato con dire il contenuto viene mappato di conseguenza tra gli alberi. Quindi, ad esempio, /this/source/foo.cva avanti dir/foo.ce così via, anziché a dir/source/foo.c.
Ma questo può essere facilmente realizzato senza l' -Topzione usando:
cp -r /this/source/. dir # Probably worked fine since dawn of Unix?
Semanticamente, il componente del punto finale viene copiato come figlio di dir, ma ovviamente quel "figlio" esiste già (quindi non deve essere creato) ed è effettivamente dirse stesso, quindi l'effetto /this/pathè identificato con dir.
Funziona bene se la directory corrente è la destinazione:
cp -r /this/tree/node/. . # node's children go to current dir
C'è qualcosa che puoi fare solo con -Tquello che può razionalizzare la sua esistenza? (Oltre al supporto per i sistemi operativi che non implementano la directory dot, una logica non menzionata nella documentazione.)
Il trucchetto di cui sopra non risolve le stesse condizioni di gara menzionate nella documentazione di GNU Info -T?
.trucco fa lavoro quando la copia di un file, non solo quando si rinomina il suo nome base allo stesso tempo!cp /path/to/file /target/dir/.Se/target/dir/fileesiste ed è una directory, ottieni la stessa diagnostica! Ma hai mostrato cosa-Tnon può essere fatto senza di esso in un solo passaggio, senza condizioni di competizione: copia un file e modifica il suo nome senza essere deviato in una sottodirectory.