Wie unterscheidet sich cp -f von cp --remove-destination?

7

In der cp-Manpage wird die Option -f / - force wie folgt aufgelistet: Wenn eine vorhandene Zieldatei nicht geöffnet werden kann, entfernen Sie sie und versuchen Sie es erneut

Für die Option --remove-destination heißt es: Entfernen Sie jede vorhandene Zieldatei, bevor Sie versuchen, sie zu öffnen (im Gegensatz zu --force).

Ersteres prüft also zuerst, ob es geöffnet werden kann. Wenn nicht, wird es trotzdem gelöscht, während letzteres diesen Schritt nur umgeht. Ich habe jedes mit der Option -i kombiniert und in beiden Fällen gibt es an, welche Berechtigungen die Dateien haben, wenn sie schreibgeschützt sind.

Letzteres scheint effizienter zu sein, insbesondere wenn große Verzeichnisse rekursiv kopiert / überschrieben werden. Warum sollten jedoch beide Optionen beibehalten werden? Was ist der Vorteil, wenn Sie überprüfen, ob etwas überhaupt außer Kraft gesetzt wird?

ein anderer Mann
quelle

Antworten:

8

Es gibt einen Unterschied zwischen den beiden (Schwerpunkt Mine):

Wenn eine vorhandene Zieldatei nicht geöffnet werden kann, entfernen Sie sie und versuchen Sie erneut
, jede vorhandene Zieldatei zu entfernen, bevor Sie versuchen, sie zu öffnen

Wenn die Datei im ersten Fall geöffnet cpwerden kann, wird versucht, nur den Inhalt zu ersetzen. cpwird die Datei nicht unnötig entfernen. Dadurch bleiben die Berechtigungen und Eigentumsrechte der Originaldatei erhalten, sofern Sie nicht angeben, dass sie auch kopiert werden sollen.

Der zweite Fall ist nützlich, wenn der Inhalt nicht gelesen werden kann (z. B. baumelnde Symlinks ).

muru
quelle
5

und: Falls die Zieldatei mehrere Links (Hardlinks) enthält, zerstört --remove-destination den Inhalt der anderen Links nicht. Stattdessen wird nur die Verknüpfung des Ziels entfernt (jetzt wissen wir, warum "Entfernen" in tieferen Systemfunktionen als "Verknüpfung aufheben" bezeichnet wird) und eine neue Datei mit einem neuen Inode erstellt.

Tilman
quelle