diff funktioniert nicht rekursiv

diff funktioniert nicht rekursiv

Ich versuche, mithilfe des Befehlszeilenprogramms zwei Verzeichnisse rekursiv zu vergleichen diff. Ich habe zwei Ordner diff1und diff2mit Inhalten wie diesen:

Bildbeschreibung hier eingeben

diff2ist leer. Aber wenn ich das tue, diff -r diff1 diff2bekomme ich nur

$ diff -r diff1 diff2
Only in diff1: folder
Only in diff1: test.html

Das ist ärgerlich. Was muss ich tun, damit es diffrekursiv funktioniert? Ich habe es versucht --recursive, aber das hilft nicht. Ich bin auf El Capitan und ein diff -vbringt 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 fooin diff1und diff2. Rekursion bedeutet, dass Ihr ursprünglicher Befehl diff -r diff1 diff2irgendwann 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 diffausfü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 diffdiese 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 diffkann nicht zu herabsteigen, folderohne sich in etwas wie rekursiv lsoder zu verwandeln find. Rekursiv lsoder zu sein, findist nicht seine Aufgabe.

diff1/folderSie können immer noch mit ls -Roder abfragen find(standardmäßig rekursiv), nachdem Sie daraus gelernt diffhaben Only in diff1: folder.

verwandte Informationen