Ich habe zwei Verzeichnisse in einem Bash-Skript, die von diesen beiden Variablen gehalten werden
$SRC
$DEST
Wie mache ich einersync
- Kopieren von Dateien von $SRC/ nach $DEST/,
- Überprüfen, ob die $DEST/*-Dateien mit den $SRC/-Dateien übereinstimmen (beste verfügbare Übereinstimmung, jedoch langsam)
- und dann die Datei $SRC/ löschen?
Bei allem, was ich google, gibt es ein Beispiel für die Ausführung eines rsync und das anschließende Löschen der DEST-Datei.
Ich verstehe das nicht. Warum sollte man einen rsync
in ein Zielverzeichnis kopieren und es dann löschen?
Machen Sie eine Google-Suche und sehen Sie, was ich meine.
Antwort1
Die Option zum Verschieben einer Datei ist --remove-source-files
. Hier ist diemanpage, und hier finden Sie einige Diskussionen:
https://unix.stackexchange.com/questions/43957/using-rsync-to-move-not-copy-files-between-directories
Beachten Sie, dass rsync Dateien immer anhand von Prüfsummen überprüft. Es liegt jedoch an Ihnen, ob dies Ihren Anforderungen genügt. Es ist wichtig, dass die Prüfsumme vom Ziel bei der Übertragung und nicht nach dem Schreiben auf die Festplatte berechnet wird. Sie wird also nicht auf Grundlage der resultierenden Datei berechnet und es tritt kein Fehler auf, es sei denn, beim Schreiben tritt ein Fehler des Betriebssystems auf. Einige Erläuterungen dazu finden Sie hier: https://unix.stackexchange.com/questions/30970/does-rsync-verify-files-copied-between-two-local-drives
Wenn dies für Ihre Anforderungen nicht ausreicht, können Sie ein Skript schreiben, um die Dateien per rsync zu synchronisieren, ohne die Quelle zu löschen. Führen Sie rsync dann erneut aus, um -c
Dateien auszuwählen/zu kopieren, deren Prüfsumme nicht übereinstimmt, und löschen Sie die Quelldateien anschließend mit rm
oder was auch immer.
Antwort2
Dies sollte eine unkomplizierte Verwendung der rsync
Option --remove-source-files
sein.
rsync --dry-run --stats -av --remove-source-files "$SRC/" "$DEST/"
Entfernen Sie --dry-run
(und möglicherweise --stats
), wenn Sie zufrieden sind, dass der Befehl das tut, was er tun soll.