Wie kann ich ein (großes) Verzeichnis in ein anderes kopieren und dabei nur die Dateien ändern, die sich unterscheiden?

Wie kann ich ein (großes) Verzeichnis in ein anderes kopieren und dabei nur die Dateien ändern, die sich unterscheiden?

Ich habe Verzeichnis a und Verzeichnis b. Sie sind groß. b ist fast identisch mit a. „Fast“ bedeutet, dass sich 4-5 Dateien unterscheiden und ich nicht weiß, welche das sind. Ich möchte b über a kopieren, aber nur die Dateien, die sich unterscheiden. Ich bin in Bash.

(nein, ich kann a nicht einfach löschen und durch b ersetzen, weil 1) a einer Versionskontrolle unterliegt und 2) eine vollständige Kopie (oder ein mv) zu viel Zeit in Anspruch nehmen würde. Ich möchte nur die Dateien kopieren, die sich unterscheiden.)

Antwort1

Sie können rsynchierfür den folgenden Befehl verwenden:rsync -tr "folder to copy from" "folder to copy to"

z.Brsync -tr /home/me/stuff/* /home/me/otherstuff/

Antwort2

Dies ist auch mit der guten alten Methode möglich cp:

Danke an srcspider für die Erinnerung, zu verwenden -T!

cp -ruT old-dir new-dir

Antwort3

Eine weitere gute Option ist Unison (http://www.cis.upenn.edu/~bcpierce/unison/), insbesondere wenn es nicht wirklich eine „Quelle“ und ein „Ziel“ gibt. Jedes Verzeichnis ist ein Stammverzeichnis und Unison synchronisiert sie und speichert Metadaten für zukünftige Synchronisierungen. Es bietet sowohl eine Befehlszeilen- als auch eine GUI-Option, die auch einfach über Cron geplant werden kann.

Ich verwende es, um ein Backup meiner Dropbox auf meinem lokalen NAS-Gerät zu erstellen, auf dem kein Dropbox-Client ausgeführt werden kann.

Antwort4

Sie können die beiden Verzeichnisse vergleichen.

diff -r Verzeichnis1 Verzeichnis2

Es wird Ihnen die Liste der Dateien angezeigt, die unterschiedlich sind

verwandte Informationen