Wie kann ich ein (großes) Verzeichnis über ein anderes kopieren, indem ich nur die Dateien ändere, die sich unterscheiden?

14

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 weiß nicht, um welche es sich handelt. 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 versionskontrolliert ist 2) eine vollständige Kopie (oder ein MV) zu viel kosten würde. Ich möchte nur die Dateien kopieren, die sich unterscheiden.

janesconference
quelle
Ist rsynceine Option?
Bobby
Es ist, aber ich weiß nicht viel über Rsync.
janesconference

Antworten:

17

Sie können rsyncdazu den Befehl verwenden, den ich verwendersync -tr "folder to copy from" "folder to copy to"

z.B rsync -tr /home/me/stuff/* /home/me/otherstuff/

Tog
quelle
1
Hüten Sie sich vor diesem Befehl. Es werden alle Dateien gelöscht, die sich nicht unterscheiden. Ich habe es laufen lassen und fast alles VERLOREN !!
Arvind K.
@Arvind Ich weiß nicht, mit welchem ​​Befehl Sie Ihre Daten verloren haben, aber es war nicht rsync -tr. Lesen Sie die Manpage.
Tog
18

Es ist auch möglich, dies mit guten alten zu tun cp:

Vielen Dank an srcspider für die Erinnerung -T!

cp -ruT old-dir new-dir

new123456
quelle
+1 Ich gewöhne mich so sehr an das Synchronisieren zwischen Maschinen, dass ich die eleganten Möglichkeiten vergesse.
Tog
funktioniert bei mir nicht :(
janesconference
Das ist eigentlich gut Gnu CP. ;-)
Keith
1
Unter OS X ist die Option -u nicht vorhanden. Ich habe einfach cp -r old-dir new-dir verwendet, da ich keine Daten vergleichen musste.
Jean-François Beauchamp,
Funktioniert nicht. Ich bin nicht sicher, ob dies eine Namenskonvention ist, aber cp -ru Ordner-A Ordner-B kopiert einfach Ordner-A in Ordner-B, kopiert nicht den Inhalt von A in B und überschreibt, was der gewünschte Effekt wäre.
Srcspider
1

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 über cron einfach geplant werden kann.

Ich verwende es, um eine Sicherungskopie meiner Dropbox auf meiner lokalen NAS-Appliance zu erstellen, auf der kein Dropbox-Client ausgeführt werden kann.

Digitalcraig
quelle
1

Es KANN mit gutem alten CP gemacht werden, wenn auch mit einem etwas anderen Format als oben angegeben. So habe ich es gemacht:

cp -ru --target-directory="destination_path" source_path/*
Sven Croon
quelle
1

Sie können die 2 Verzeichnisse unterscheiden.

diff -r dir1 dir2

Es zeigt Ihnen die Liste der Dateien, die verschieden sind

Oleg
quelle