it-swarm.com.de

show funktioniert diff --exclude?

Ich versuche, diff zu verwenden, um zwei Verzeichnisbäume zu vergleichen, während bestimmte Unterverzeichnisse ignoriert werden, aber ich kann es nicht zum Laufen bringen. So sieht meine Dateistruktur aus:

temp/
|-- d1/
    |-- f1.txt
    |-- ignoreme/
        |-- f2.txt
|-- d2/
    |-- f1.txt
    |-- ignoreme/
        |-- f2.txt

Ich versuche, alles unter d1/ignoreme Und d2/ignoreme Zu ignorieren, aber es geht nicht.

diff -qr --exclude=/home/ubuntu/temp/d1/ignoreme/ d1 d2
Files d1/ignoreme/f2.txt and d2/ignoreme/f2.txt differ

Ich habe es auch versucht

diff -qr --exclude=/home/ubuntu/temp/d1/ignoreme/* d1 d2

und

diff -qr --exclude=/home/ubuntu/temp/d1/ignoreme/* --exclude=/home/ubuntu/temp/d2/ignoreme/* d1 d2

aber ich bekomme immer das gleiche Ergebnis. Wie bringe ich das zum Laufen?

9
d512

Das -x oder --exclude Optionen für GNU diff verwenden Sie ein Dateinamen-Globbing-Muster, mit dem der Name jeder Datei und jedes Verzeichnisses abgeglichen wird. Wenn das Muster mit einem bestimmten Namen übereinstimmt, wird dieser Name ausgeschlossen aus dem Vergleich.

Das Muster wird auf den Basisnamen von Dateien und Verzeichnissen angewendet, nicht auf Pfadnamen. Dies bedeutet, dass Sie zum Ausschließen Ihres Verzeichnisses ignoreme verwenden würden

diff -qr --exclude=ignoreme ...

Dies würde auch jeden anderen Namen ausschließen, der zufällig ignoreme ist.

Dies ist ähnlich wie die Art und Weise, wie --exclude und --exclude-dir funktioniert in GNU grep beim rekursiven Ausführen von grep, obwohl das GNU grep Handbuch erklärt dies besser.

Die info Dokumentation für GNU diff beschreibt es:

-x PATTERN
--exclude=PATTERN
Ignorieren Sie beim Vergleichen von Verzeichnissen Dateien und Unterverzeichnisse, deren Basisnamen mit PATTERN übereinstimmen.

13
Kusalananda