Warum haben einige GNU Coreutils-Befehle die -T/--no-target-directoryOption? Es scheint, dass alles, was es tut, mit der Semantik von .(self dot) in einer traditionellen Unix-Verzeichnishierarchie erreicht werden kann.
In Anbetracht:
cp -rT /this/source dir
Die -TOption verhindert, dass die Kopie ein dir/sourceUnterverzeichnis erstellt. Vielmehr /this/sourcewird mit identifiziert dirund der Inhalt entsprechend zwischen den Bäumen abgebildet. So /this/source/foo.cgeht zum Beispiel zu dir/foo.cund so weiter, anstatt zu dir/source/foo.c.
Dies kann jedoch problemlos ohne die folgende -TOption erreicht werden:
cp -r /this/source/. dir # Probably worked fine since dawn of Unix?
Semantisch wird die abschließende Punktkomponente als Kind von kopiert dir, aber natürlich existiert dieses "Kind" bereits (muss also nicht erstellt werden) und ist tatsächlich dirselbst, so dass der Effekt derjenige /this/pathist, mit dem identifiziert wird dir.
Es funktioniert einwandfrei, wenn das aktuelle Verzeichnis das Ziel ist:
cp -r /this/tree/node/. . # node's children go to current dir
Gibt es etwas , können Sie tun , nur mit , -Tdass seine Existenz rationalisieren? (Neben der Unterstützung für Betriebssysteme, die das Punktverzeichnis nicht implementieren, eine Begründung, die in der Dokumentation nicht erwähnt wird.)
Löst der obige Punkttrick nicht die gleichen Wettkampfbedingungen, die in der GNU Info-Dokumentation zu erwähnt sind -T?
.Trick funktioniert beim Kopieren einer Datei, nur nicht beim gleichzeitigen Umbenennen des Basisnamens!cp /path/to/file /target/dir/.Wenn/target/dir/filevorhanden und ein Verzeichnis ist, erhalten Sie die gleiche Diagnose! Aber Sie haben gezeigt, was-Tdas nicht kann, ohne es in einem Schritt und ohne Race-Bedingungen zu tun: Kopieren Sie eine Datei und ändern Sie ihren Namen, ohne dass sie in ein Unterverzeichnis verschoben wird.