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?

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 ... :)


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.


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


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

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.