2017-08-09 6 views
0

Ich habe Ordner A und Ordner BOrdner vergleichen, erstellen Archiv der Unterschiede

Ordner A enthält ca. 100 Dateien alle Texte, js, php, bash etc. Sie im Stammverzeichnis des Ordners und Unter gespeichert werden Ordner und weitere Unterordner in Ordner A.

Ordner B ist eine Kopie von Ordner A, aber einige der Dateien wurden aktualisiert.

Gibt es irgendeine Weise, die ich von A nach B vergleichen und eine tar.gz-Datei erstellen, nur die Dateien enthält, die in Ordnern B

ich die Ordnerstruktur geändert haben intakt, wenn der Teer halten müsste. gz ist erstellt.

Derzeit verwende ich WinMerge, um nach Unterschieden zu suchen, aber ich freue mich, alle Windows- oder Linux-Anwendungen/Befehle zu sehen, die dabei helfen.

Dank

Antwort

1

Diese Zeile schließt Dateien, die nur in der einen oder anderen, sondern schafft die tar.gz-Datei, die Sie wollen.

diff -rq folderA folderB | grep -v "^Only in" | sed "s/^.*and folderB/folderB/g" | sed "s/ differ//g" | tar czf output.tar.gz -T - 

Gegliedert geht es:

dif -rq folderA folderB 

einen rekursiven diff zwischen diesen Ordnern tun, um es ruhig sein - nur dann ausgegeben, die Dateinamen.

| grep -v "^Only in" 

Ausschließen von Zeilen, die angeben, dass sich eine Datei nur in einem der Ordner befindet. Ich gehe davon aus, dass dies kein Problem für dich ist, aber die zwei Ordner, mit denen ich gespielt habe, waren ein bisschen dreckig.

| sed "s/^.*and folderB/folderB/g" 

das erste Bit der Ausgabe verwerfen, bis er sagt, „und“ und dann den Namen des zweiten Ordner. Dies geschieht tatsächlich die zweiten Ordnernamen als auch weg, aber ersetzt sie dann in

| sed "s/ differ//g" 

Discard das Ende Bit der diff Ausgabe zurück.

| tar czf output.tar.gz -T - 

Sagen Sie Teer, um das Ding zu tun. c == Erstellen Sie eine TAR-Datei z bedeutet komprimieren Sie es (zip) f bedeutet der Dateiname kommt in Kürze. output.tar.gz Ausgabedatei ist -T bedeutet „die Dateinamen aus der Datei erhalte ich bin, Ihnen zu sagen,“ das letzte - bedeutet

„stdin verwenden Sie stattdessen:“ Ich schlage vor, Sie dies selbst in den einzelnen Schritten aufbauen, so dass Sie sehen können, wie es konstruiert ist und wie die Ausgabe jedes Schrittes ist.

+0

Danke das funktioniert, aber die resultierende tar.gz Datei hat OrdnerB als der erste Ordner in der Datei. Ist es möglich, nur die Dateien und die Unterordnerstruktur zu speichern? zB: eine Ebene in OrdnerB? – Tom

+0

Wenn Sie den Befehl in OrdnerB ausführen, scheint die Aktualisierung der verwendeten Pfade und das Ausschließen von output.tar.gz zu funktionieren. 'diff -rq ../folderA. | grep -v "^ Nur in" | sed "s /^.* und. \ /// g" | sed "s/differ/g" | tar czf output.tar.gz --ausschluss = *. tar.gz -T - ' – Tom

Verwandte Themen