Synchronisieren Sie zwei lokale Ordner in der Bash

21

Ich habe einen großen Ordner "X" in meinem Home-Verzeichnis und eine veraltete Kopie davon auf einem Flash-Laufwerk - Y. Was ist das Analogon von rm Y; cp X Y, aber ohne bereits vorhandene Dateien zu überschreiben?

Jofsey
quelle

Antworten:

25

Es gibt noch viele weitere Eigenschaften rsync als die vorherige Antwort erwähnt. Sie sollten selbst nachschauen:

man rsync

Aber für dein Problem würde ich vorschlagen:

rsync -a --delete X Y

Auf diese Weise löscht der Empfänger (Y) alle Dateien, die sich nicht in X befinden. Stellen Sie sicher, dass Sie es richtig machen. Wird falsch verwendet, da root das System leicht töten kann ... :)

Mattias Åslund
quelle
1
Stimmen Sie zu, dass Sie dabei sehr vorsichtig sein sollten. Fügen Sie dem Befehl --dry-run hinzu, um zu sehen, was passiert, ohne Änderungen vorzunehmen. Wenn es gut geht, machen Sie den gleichen Befehl ohne --dry-run
squarecandy
Eine kleine Korrektur, die eine Weile brauchte, um zu erreichen: rsync -a --delete X/ Y. Dieser kleine Schrägstrich nach X hat dazu geführt, dass es so funktioniert, wie es für mich vorgesehen war, sodass es auch anderen helfen könnte. Hier erklärt: abbeyworkshop.com/howto/unix/nix_rsync/index.html
Shovalt
15

Schaut mal rein rsync (1) . Es soll so ziemlich genau das tun, was Sie wollen.

rsync -av X Y

Es unterstützt das Fernkopieren über sein eigenes Protokoll oder ssh, es kann jedoch auch lokal verwendet werden.

Abhängig von dem gewünschten Verhalten möchten Sie möglicherweise auch die --update Möglichkeit. Dadurch wird rsync angewiesen, keine Dateien zu überschreiben, die bereits auf dem Ziel vorhanden sind und neuer sind als die in der Quelle.

Wenn Sie zusätzliche Dateien entfernen möchten (d. H. Dateien, die in Y vorhanden sind, aber nicht in X), können Sie die --delete Möglichkeit.

Kristof Provost
quelle
Es werden jedoch keine Dateien entfernt, sondern in X entfernt rm Y; cp X Y werden.
Um aus X entfernte Dateien zu entfernen, verwenden Sie die Option --delete.
csonuryilmaz
0

Versuchen Sie es mit rsnyc, möglicherweise mit dem folgenden Befehl:

rsync -avzu /home/x /y

-u = überschreiben Sie keine Datei am Ziel, wenn diese geändert wird

bwDraco
quelle
Es werden jedoch keine Dateien entfernt, sondern in X entfernt rm Y; cp X Y werden.
0

Ich glaube, einige der Funktionen, nach denen Sie in Option -u (Update) suchen, sind in dieser Option tatsächlich vorhanden:

"--ignore-exists" - überspringt die Aktualisierung der auf dem Empfänger vorhandenen Dateien

promet
quelle