Vergleichen Sie zwei Verzeichnisbäume

4511
curios

Ich habe zwei Musikbibliotheken, eine neuere Version als die andere. Ich möchte sie mit der Zahl der Dateien vergleichen, die ich vom neuen Musikbaum zum alten kopieren muss.

Ich habe versucht, diff --brief -r /oldmusicdir/ /newmusicdir/den Vorschlag eines anderen Benutzers zu verwenden, aber der Prozess wurde nach fünfzehn Minuten ausgeführt (ich schätze, der Unterschied ist, dass die Musikdateien selbst gescannt werden - was nicht notwendig ist).

Dann habe ich es find /oldmusicdir/ -type d | sort > oldmusicdirfür alt und neu versucht, dann lief es diff oldmusicdir newmusicdirjedoch. Da ich die Musikverzeichnisse an unterschiedlichen Orten abgelegt habe, wurde jeder einzelne Eintrag markiert.

Als nächstes versuchte find /musicdir/ -type d | basename -s - | sort > musicdirich es auszuführen, aber dann las ich meine musicdir-Datei einfach "-".

Weiß jemand, wie man von STDIN Basisnamen akzeptiert? Oder hat jemand eine bessere Möglichkeit, zwei Musikverzeichnisse schnell zu vergleichen?

Vielen Dank!

5

2 Antworten auf die Frage

7
Tony Cesaro

Das rsyncProgramm kam mir zuerst in den Sinn, als ich Ihre Frage sah. Wenn Sie wie folgt vorgehen, können Sie schnell feststellen, welche Dateien sich im Verzeichnis befinden, aaber nicht in b:

$ rsync -rcnv a/* b/  -r will recurse into the directories -c will compare based on file checksum -n will run it as a "dry run" and make no changes, but just print out the files  that would be updated -v will print the output to stdout verbosely 

Dies ist eine gute Option, da Sie den Inhalt der Dateien auch vergleichen können, um sicherzustellen, dass sie übereinstimmen. rsyncDer Delta-Algorithmus ist für diesen Anwendungsfall optimiert. Wenn Sie dann bden Inhalt anpassen möchten, aentfernen Sie einfach die -nOption, um die eigentliche Synchronisierung durchzuführen.

Einige verwandte Fragen:

Rsync scheint ein sehr mächtiges Programm zu sein. Auf jeden Fall meine Zeit wert, um kennenzulernen. Ausführen von `rsync -nv --delete a / b / | grep deleting` gab mir eine Liste der Dateien, die auf b, aber nicht auf a vorhanden waren. Vielen Dank! curios vor 10 Jahren 0
0
Jason Aller

Wie wäre es, eine rekursive Verzeichnisliste jedes Verzeichnisses in separaten Dateien zu generieren und dann diffdiese beiden Dateien zu verwenden?

Cool. Gute Idee, aber es tut immer noch / path / albumname, also werden alle Alben markiert, wenn ich diff ausführe, da sie unterschiedliche Pfade haben. curios vor 10 Jahren 0
`diff --recursive --quiet --new-file dir1 / dir2 /` Tom Hale vor 7 Jahren 0