GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Wie synchronisiere ich zwei Ordner mit Befehlszeilentools?

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

Linux
  1. Linux – Wie synchronisiert man zwei Ordner mit Kommandozeilen-Tools?

  2. So starten Sie Linux über die Befehlszeile neu

  3. So löschen Sie Dateien mit einer bestimmten Erweiterung in der Linux-Befehlszeile

  4. Wie sortiere ich Dateien in Ordnern nach Dateityp auf Bash (mit dem Befehl ‚file‘)?

  5. Wie kann ich eine Datei mit einer bestimmten Größe von einer Befehlszeile aus erstellen?

So senden Sie eine E-Mail mit Dateianhang von der Befehlszeile aus

So überprüfen Sie die Betriebssystemversion mit der Linux-Befehlszeile

So installieren Sie Dig unter Linux mit Befehlszeilenbeispielen

So finden Sie die IP-Adresse in der Linux-Befehlszeile

So funktioniert die Versionskontrolle mit Git auf der Kommandozeile

So überwachen Sie den Zustand von Linux-Servern mit Befehlszeilentools