
Ich versuche, mithilfe des Befehlszeilenprogramms zwei Verzeichnisse rekursiv zu vergleichen diff
. Ich habe zwei Ordner diff1
und diff2
mit Inhalten wie diesen:
diff2
ist leer. Aber wenn ich das tue, diff -r diff1 diff2
bekomme ich nur
$ diff -r diff1 diff2
Only in diff1: folder
Only in diff1: test.html
Das ist ärgerlich. Was muss ich tun, damit es diff
rekursiv funktioniert? Ich habe es versucht --recursive
, aber das hilft nicht. Ich bin auf El Capitan und ein diff -v
bringt mich zum Stehen diff (GNU diffutils) 2.8.1
.
Antwort1
Das von Ihnen erlebte Verhalten ist beabsichtigt. Ich glaube nicht, dass Sie bekommen können, was Sie wollen, es sei denn, Sie lassen andere Tools als zu diff
. Aus Ihrem Kommentar:
Wenn ich „rekursiv“ lese, gehe ich davon aus, dass der Prozess nicht auf der ersten Ebene endet.
Es hört nicht wegen der ersten Ebene auf. Denken Sie daran, was Rekursion bedeutet:
mit Funktionen, dierufen Sie sich selbst aus ihrem eigenen Code heraus auf
(Quelle:Hier; Hervorhebung von mir)
Stellen Sie sich vor, Sie haben ein gemeinsames Unterverzeichnis foo
in diff1
und diff2
. Rekursion bedeutet, dass Ihr ursprünglicher Befehl diff -r diff1 diff2
irgendwann aufruft
diff -r diff1/foo diff2/foo
OK, in der Praxis wird dies höchstwahrscheinlich von einer Subroutine erledigt, die sich selbst innerhalb eines einzelnen Prozesses aufruft (aber ich denke, eine Implementierung, die tatsächlich diff
ausführbare Dateien aufruft, ist möglich). Logischerweise ist es trotzdem so.
Sie haben diff1/folder
, aber es gibt kein diff2/folder
. Wie können Sie diff
diese aufrufen, um sie zu vergleichen? Mit anderen Worten, was sollte <unknown_name>
sein, damit Sie die gewünschte Ausgabe aus dem folgenden Formular erhalten?
diff -r diff1/folder diff2/<unknown_name>
Es gibt kein <unknown_name>
passendes. Rekursiv diff
kann nicht zu herabsteigen, folder
ohne sich in etwas wie rekursiv ls
oder zu verwandeln find
. Rekursiv ls
oder zu sein, find
ist nicht seine Aufgabe.
diff1/folder
Sie können immer noch mit ls -R
oder abfragen find
(standardmäßig rekursiv), nachdem Sie daraus gelernt diff
haben Only in diff1: folder
.