Ich habe eine Frage zum Befehl diff, wenn ich ein rekursives Verzeichnis diff möchte, aber nur für einen bestimmten Dateityp. Wie geht das?
Ich habe versucht, die Ausschlussoption zu verwenden, kann aber nur ein Muster verwenden:
$ diff /destination/dir/1 /destination/dir/2 -r -x *.xml
mit dem Befehl , den ich nur xml Dateityp, obwohl ausschließen kann , gibt es Dateien in dem Ordner Bildtyp ( png
, gif
, jpg
), txt
, php
usw.
wie man nur bestimmte Dateitypen unterscheidet.
Antworten:
Sie können
-x
mehr als einmal angeben .Aus dem Abschnitt Verzeichnisse vergleichen von
info diff
(auf meinem System muss ich Folgendes tuninfo -f /usr/share/info/diff.info.gz
):quelle
Entnommen aus (einer Version von) der Manpage:
Es sieht also so aus
-x
, als würde beim Melden nur ein Muster akzeptiert. Wenn Sie jedoch alle Muster, die Sie ausschließen möchten, in eine Datei einfügen (vermutlich eines pro Zeile), können Sie das zweite Flag wie folgt verwenden:wo exclude.pats ist:
quelle
find . -type f -not -name '*.<my-ext>' | xargs -I% basename '%' | awk -F . 'NF > 1 { print "*." $NF}; NF == 1 { print $NF }' | sort | uniq > exclude.pats
find . -not -name "*.c" -and -not -name "*.h" -and -type f -print0 | xargs -0 basename | grep -E '.*\..+' | sed 's/\./\//g' | xargs basename | xargs printf '*.%s\n' | sort | uniq > X-FILE
Ich möchte glauben, dass dies hilft, vielleicht auch unter Linux. (In diesem Beispiel ist eine Single-name "*.[ch]"
in Ordnung, aber nicht sehr anschaulich)Sie können find auch mit -exec verwenden, um diff aufzurufen:
quelle
Das Fehlen einer ergänzenden - einschließlich ....
Wir können eine Problemumgehung durchführen, eine Ausschlussdatei mit allen Dateien, außer dem, was wir einschließen möchten. Also erstellen wir
file1
mit einem Find alle Dateien, die keine Erweiterungen haben, die wir einschließen möchten,sed
fangen den Dateinamen und sind nur:Beispielsweise:
quelle
find PATH1/ -type f | grep --text -v -e "php$" -e html$" | sed 's/.*\///' | sort -u > file1 diff PATH1/ PATH2/ -rq -X file1
Ich habe den folgenden Befehl verwendet, um den Unterschied aller
*.tmpl
Dateien zwischenDIR1
und zu ermittelnDIR2
. In meinem Fall hat dies keine Fehlalarme ergeben, aber es kann für Sie sein, abhängig vom Inhalt Ihres DIRS.diff --brief DIR1 DIR2 | grep tmpl
quelle
Falls Sie es bequem finden, können Sie Folgendes verwenden
Makefile
. Einfach ausführen: "Patch erstellen"quelle
Das Fehlen eines komplementären Einschlusses macht es notwendig, solche verschlungenen heuristischen Muster wie zu verwenden
(meistens) Java-Dateien finden!
quelle
Wenn Sie verschiedene Quellen unterscheiden und einfach halten möchten:
Entfernen Sie das letzte grep, wenn Sie die Dateien abrufen möchten, die nur in einem der Pfade vorhanden sind.
quelle
Obwohl das tatsächliche
diff
Vorhandensein anderer Dateien nicht vermieden wird, können Sie , wenn Sie eine Patch-Datei oder ähnliches erstellen möchten,filterdiff
aus dempatchutils
Paket verwenden, z. B. nur Ihre.py
Änderungen patchen :quelle