Vergleichen Sie 2 Verzeichnisse und kopieren Sie die Unterschiede auf Verzeichnis-3
Ich habe drei Verzeichnisse. Ich würde gerne vergleichen directory1 mit verzeichnis2, dann nehmen Sie diese änderungen/neue Dateien und kopieren Sie Sie auf, um directory3. Gibt es einen einfachen Weg, dies zu tun, vielleicht durch den Einsatz von linux diff und cp-Befehle? Ich bin offen für Ideen.
Dank!
Andrew
- Sind Sie wollen, tun Sie dies in einem shell-Skript oder code schreiben?
- Ich benutze Total Commander-Verzeichnis vergleichsmodus für diese, es ist toll! TC ist das einzige Windows-Programm, das ich vermisse unter Linux.
- w3d: ich eher dies tun, in ein shell-Skript, wenn ich könnte. Ich hoffe, es ist ein Weg der Einsatz von linux-diff-Befehl mit dem linux-Befehl cp. Carl: ich will check this out, Dank...
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich glaube, das ist, was Sie wollen aus Ihrer Beschreibung.
Einer Sache war ich nicht sicher, was Sie wollte, wenn eine Datei vorhanden ist in dir1, aber nicht dir2.
Den thread yonder löst dein problem ganz gut, ich sollte denken!
Kopiert von dort:
Können Sie es auch tun, ohne ein bash-Skript:
diff -qr ./dir1 ./dir2 | sed -e 's/^Only in\(.*\): \(.*\)/\1\/\2/g' -e 's/and \..*differ$//g' -e 's/^Files //g' | xargs -I '{}' cp -Rf --parents '{}' ./dir3/
Diese Lösung beseitigt alle zusätzlichen text aus dem diff-Befehl mit der sed, und kopiert dann die Dateien mit Beibehaltung der Ordnerstruktur.
Den beiden zuvor geposteten Antworten, die mir geholfen, zu erhalten begonnen, aber hat mich nicht ganz dort. Die Lösung geschrieben von thomax war wirklich nahe, aber ich lief in ein Problem, wo der cp-Befehl auf osx nicht unterstützen-die Eltern sind parameter, so hatte ich Sie einige Logik-rund um die Erstellung von Unterordnern, die Dinge ein bisschen chaotisch und ich musste umstrukturieren, ein bisschen. Hier ist, was ich aufgewickelt mit:
Meinung sind, Sie haben
dir1
,dir2
unddir3
auf der gleichen Ebenemit dem content-setup wie folgt:
Beim erstellen und anwenden von patch so:
Dann haben Sie Inhalt
dir2
unddir3
entspricht.Wenn Ihr
dir2
ist nicht auf der gleichen Ebene wiedir1
dann haben Sie zum Bearbeiten von Dateinamen im patch
so dass Sie haben gleich viele Pfad-Komponenten
in beiden
dir1
unddir2
Dateinamen.Sollten Sie besser setzen Sie Ihre
dir2
auf die gleiche Ebene wiedir1
,denn es gibt keinen eleganten Weg, dies zu tun (zumindest mir bekannt).
Hier Folgen Sie einer "falschen" Weg.
Betrachten Sie Ihre
dir2
befindet sich in einigen$BASEDIR
dann sollten Sie aktualisieren Sie Ihre diff zu trimmen des
$BASEDIR
ausdir2
's Wegwie diese
Und dann konnte Sie den resultierenden Pfad wie oben.