Ich verwende Rsync, um wichtige Dateien von einem Server abzurufen, und lösche die Dateien dann vom Server, sobald ich sie lokal habe. Der vollständige Befehl, den ich ausführe, ist unten.
Dadurch werden die Dateien auf dem Quellserver erfolgreich gelöscht , es verbleiben jedoch noch leere Verzeichnisse. Ich erhalte keine Nachrichten oder Fehler. Alle Ausgaben sind normal. Vielleicht ist dies die beabsichtigte Funktionalität.
Wie kann ich rsync anweisen, alles einschließlich der Verzeichnisse zu bereinigen?
rsync --progress -vrzh --remove-source-files
Version ist 3.0.9 an beiden Enden.
Antworten:
Das Verhalten
--remove-source-files
, das Sie beobachten, ist genau das, das angegeben wird durchman rsync
:Es gibt keinen speziellen Befehl zum Entfernen der Verzeichnisse, wie diese beiden Diskussionen in StackExchange und ServerFault deutlich zeigen. Die dort vorgeschlagene Lösung besteht darin, zwei separate Befehle auszugeben:
Das letzte Stück des Befehls in diesen beiden Beiträgen vorgeschlagen,
Das zum Entfernen des (jetzt geleerten) Quellverzeichnisses erforderliche Formular befindet sich in diesen Posts, da die OPs und die Antworten rsync verwenden, um große Mengen von Dateien auf demselben Computer zu verschieben. In Ihrem Fall müssen Sie dies manuell tun.
quelle
rsync --delete
Vorschlag ist gefährlich, da er die Möglichkeit ignoriert, dass der rsync-Vorgang nicht abgeschlossen wurde oder neue Dateien an der Quelle vorhanden sind. Die folgendefind
Methode von @ slhck ist viel sicherer.Die Manpage sagt sogar:
Wenn Sie leere Verzeichnisse in Ihrer Quelle entfernen möchten, gehen Sie wie folgt vor, wenn noch Dateien vorhanden sind:
Aber für ein leeres Root-Verzeichnis reicht
rm -rf <directory>
natürlich ein Wille aus.quelle
find some_dir -depth -type d -empty -not -path some_dir -delete
Die Verwendung von " rm -rf " hat eine inhärente Racebedingung. Sie können nämlich Dateien löschen, die gerade zwischen rsync und rm erstellt wurden Aufruf erstellt wurden.
Ich bevorzuge zu verwenden:
Dadurch werden die Verzeichnisse NICHT entfernt, wenn sie nicht leer sind.
quelle
rm -rf
werden auch Dateien entfernt, die aus irgendeinem Grund nicht übertragen wurden.-depth
Option, die anweistfind
, in der richtigen Reihenfolge zu verarbeiten. Infolge dieses Fehlers werden Verzeichnisse, die (möglicherweise rekursiv) nur leere Verzeichnisse enthalten, nicht gelöscht. Die Variante von @slhck hat es richtig.-m, --prune-empty-dirs
Entfernen Sie leere Verzeichnisketten aus der Dateiliste--force
Löschung von Verzeichnissen erzwingen, auch wenn diese nicht leer sindquelle
Entfernen Sie die Quelldateien und anschließend aus Sicherheitsgründen die Verzeichnisse.
quelle