Normalerweise mache ich das, rsync -n
bevor ich ein tatsächliches mache rsync
. Die Sache ist, wie könnte ich den zweiten Durchlauf automatisieren, um genau die Liste wiederzuverwenden, die mit erzeugt wurde --dry-run
?
Ich meine, wenn ich rsync -n
dann laufe, bekomme ich eine Simulation dessen, was passieren rsync
würde. Meine Idee wäre, diese Ausgabe zu nehmen, sie zu verarbeiten und dann irgendwie rsync
nur --include-from
diese Ausgabe zu machen, so dass die vollständige Liste nur einmal berechnet werden muss.
Wenn dies nicht einmal Sinn macht, lassen Sie es mich bitte wissen.
Übrigens neige ich dazu, zu verwenden rsync -hva --progress --stats --delete --exclude-from "$EXCLUDEFILE"
. Wenn Sie auch einen Vorschlag haben, welche Optionen Sie verwenden möchten, lassen Sie es mich bitte wissen. Ich versuche, den Inhalt einer externen Festplatte (die nur Bilder, Videos und Dokumente enthält) auf eine andere externe Festplatte zu kopieren.
quelle
--dry-run
Befehls in eine Datei umzuleiten (z. B.rsync --dry-run -avz SOURCE DEST > include.txt
), indem Sie alle Zeilen, die keine Dateien / Pfade sind, aus include.txt entfernen und ausführenrsync --include-from include.txt
.rsync --include-from include.txt --exclude=* SOURCE DEST
. Weitere Informationen finden Sie unter stackoverflow.com/a/19296415/1765910 .rsync
aber ich weiß nichts von Shell-Skripten / Bash ...Antworten:
Es ist durchaus möglich, die bei einem Probelauf erzeugte Dateiliste als Include-Datei zu verwenden. Im Idealfall sollten jedoch die zusätzlichen Zeilen am oberen und unteren Rand der Probelaufausgabe gelöscht werden.
Beispielausgabe:
Um diese Zeilen zu entfernen, leiten Sie die
rsync
Ausgabe inhead
und intail
. Speichern Sie dann die verarbeitete Ausgabe in einer Include-Datei:rsync --dry-run -avz source/ destination/ | head --lines=-3 | tail --lines=+3 > include.txt
Zum Schluss teilen Sie uns
rsync
mit, dass Sie die generierte Include-Datei verwenden möchten (fügen Sie nach Wunsch weitere Optionen hinzu):rsync --include-from=include.txt --exclude=* source/ dest/
quelle
tail
/head
robust genug, um sicherzustellen, dass nur die Liste der Dateien vorhanden ist?--delete
das Hinzufügen werden Dateien, die aus den Quellverzeichnissen gelöscht wurden, auch aus den Zielverzeichnissen gelöscht, zumindest auf dem Computer, auf dem ich es ausprobiert habe. Sie können dentail
/head
Teil komplett weglassen.rsync
interpretiert jede Zeile in der Include-Datei als Dateinamen und ignoriert einfach nicht vorhandene Dateien. In diesem Fall geschieht nichts, wenn Sie die zusätzlichen Zeilen beibehalten (es sei denn, Sie haben Dateien mit dem Namen "Liste inkrementeller Dateien senden" usw.) Diese Dateien werden ebenfalls kopiert.