Dadurch wird Ordner A in Ordner B verschoben:
rsync -avu --delete "/home/user/A" "/home/user/B"
Wenn Sie den Inhalt der Ordner A und B möchten Um dasselbe zu sein, geben Sie /home/user/A/
ein (mit dem Schrägstrich) als Quelle. Dies nimmt nicht den Ordner A, sondern seinen gesamten Inhalt und legt ihn in Ordner B ab. So:
rsync -avu --delete "/home/user/A/" "/home/user/B"
-a
Führen Sie die Synchronisierung unter Beibehaltung aller Dateisystemattribute durch-v
ausführlich ausführen-u
nur Dateien mit neuerer Änderungszeit (oder Größenunterschied bei gleichen Zeiten) kopieren--delete
Löschen Sie die Dateien im Zielordner, die in der Quelle nicht vorhanden sind
Manpage:https://download.samba.org/pub/rsync/rsync.html
Sie könnten unison
Tool, das von Benjamin Pierce bei U Penn entwickelt wurde.
Nehmen wir an, Sie haben zwei Verzeichnisse,
/home/user/Documents/dirA/
und /home/user/Documents/dirB/
Um diese beiden zu synchronisieren, können Sie Folgendes verwenden:
~$unison -ui text /home/user/Documents/dirA/ /home/user/Documents/dirB/
In der Ausgabe unison
zeigt alle Verzeichnisse und Dateien an, die anders sind in den beiden Verzeichnissen, die Sie zur Synchronisierung angefordert haben. Es wird empfohlen, beim ersten Durchlauf zusätzlich zu synchronisieren (fehlende Dateien an beiden Speicherorten zu replizieren), dann einen Synchronisierungsbaum auf Ihrem Computer zu erstellen und zu pflegen, und bei nachfolgenden Durchläufen wird es eine echte Synchronisierung implementieren (d. h. wenn Sie eine Datei aus .../dirA
, wird es aus .../dirB
gelöscht auch. Sie können auch jede einzelne Änderung vergleichen und optional weiterleiten oder rückwärts zwischen den beiden Verzeichnissen synchronisieren.
Optional können Sie zum Starten der grafischen Benutzeroberfläche einfach -ui text
entfernen Option aus Ihrem Befehl, obwohl ich den cli
finde einfacher und schneller zu verwenden.
Mehr dazu:Unison-Tutorial in der Unison-Benutzerdokumentation.
Die Antwort von TuxForLife ist ziemlich gut, aber ich empfehle Ihnen dringend, -c
zu verwenden beim lokalen Synchronisieren. Sie können argumentieren, dass es die Zeit-/Netzwerkstrafe nicht wert ist, dies für Remote-Synchronisierungen zu tun, aber es lohnt sich auf jeden Fall für lokale Dateien, weil die Geschwindigkeit so groß ist.
-c, --checksum This forces the sender to checksum every regular file using a 128-bit MD4 checksum. It does this during the initial file-system scan as it builds the list of all available files. The receiver then checksums its version of each file (if it exists and it has the same size as its sender-side counterpart) in order to decide which files need to be updated: files with either a changed size or a changed checksum are selected for transfer. Since this whole-file checksumming of all files on both sides of the con- nection occurs in addition to the automatic checksum verifications that occur during a file's transfer, this option can be quite slow. Note that rsync always verifies that each transferred file was correctly reconstructed on the receiving side by checking its whole-file checksum, but that automatic after-the-transfer verification has nothing to do with this option's before-the-transfer "Does this file need to be updated?" check.
Dies zeigt, wie Sie mit der gleichen Größe und den gleichen Zeitstempeln scheitern können.
Die Einrichtung
$ cd /tmp
$ mkdir -p {A,b}/1/2/{3,4}
$ echo "\___________from A" | \
tee A/1/2/x | tee A/1/2/3/y | tee A/1/2/4/z | \
tr A b | \
tee b/1/2/x | tee b/1/2/3/y | tee b/1/2/4/z | \
tee b/1/2/x0 | tee b/1/2/3/y0 > b/1/2/4/z0
$ find A b -type f | xargs -I% sh -c "echo %; cat %;"
A/1/2/3/y
\___________from A
A/1/2/4/z
\___________from A
A/1/2/x
\___________from A
b/1/2/3/y
\___________from b
b/1/2/3/y0
\___________from b
b/1/2/4/z
\___________from b
b/1/2/4/z0
\___________from b
b/1/2/x
\___________from b
b/1/2/x0
\___________from b
Der rsync, der nichts kopiert, weil die Dateien alle dieselbe Größe und denselben Zeitstempel haben
$ rsync -avu A/ b
building file list ... done
sent 138 bytes received 20 bytes 316.00 bytes/sec
total size is 57 speedup is 0.36
$ find A b -type f | xargs -I% sh -c "echo %; cat %;"
A/1/2/3/y
\___________from A
A/1/2/4/z
\___________from A
A/1/2/x
\___________from A
b/1/2/3/y
\___________from b
b/1/2/3/y0
\___________from b
b/1/2/4/z
\___________from b
b/1/2/4/z0
\___________from b
b/1/2/x
\___________from b
b/1/2/x0
\___________from b
Der rsync, der korrekt funktioniert, weil er Prüfsummen vergleicht
$ rsync -cavu A/ b
building file list ... done
1/2/x
1/2/3/y
1/2/4/z
sent 381 bytes received 86 bytes 934.00 bytes/sec
total size is 57 speedup is 0.12
$ find A b -type f | xargs -I% sh -c "echo %; cat %;"
A/1/2/3/y
\___________from A
A/1/2/4/z
\___________from A
A/1/2/x
\___________from A
b/1/2/3/y
\___________from A
b/1/2/3/y0
\___________from b
b/1/2/4/z
\___________from A
b/1/2/4/z0
\___________from b
b/1/2/x
\___________from A
b/1/2/x0
\___________from b