Výpis adresářů by měl fungovat; např. zde je to, co jsem použil ve skriptu (za předpokladu gnu diff),
diff -r \
--exclude="*~" \
--exclude=".svn" \
--exclude=".git" \
--exclude="*.zip*" \
--exclude="*.gz" \
--exclude="*.tar" \
...etc
...který ignoruje obsah .svn a .git dirs, ale také jednotlivé soubory s názvem *.zip /*.gz /atd.
Upravit: Za účelem filtrování cest ve tvaru dir_a/file1 ale stále diff soubory se stejným základním názvem, například dir_b/file1 nebo dir_a/b/file1 , pak seznam souborů do diff by musel být vygenerován (například pomocí find ) a soubor k porovnání odvozený z těchto cest; např. daný
$ find ONE TWO -type f -print
ONE/a/1.txt
ONE/a/2.txt
ONE/a/b/2.txt
TWO/a/1.txt
TWO/a/2.txt
TWO/a/b/2.txt
vygenerujete seznam souborů k porovnání, s výjimkou například */a/2.txt ale stále porovnáváme další soubory s názvem 2.txt . Stačí "najít" všechny soubory kromě ONE/a/2.txt (lze zde také použít regulární výraz, například .*/a/2.txt )
$ find ONE -type f \( ! -regex 'ONE/a/2.txt' \) \
-exec bash -c 'diff -q "${1}" "${2/ONE/TWO}"' - {} {} \;
což ve skutečnosti ignoruje ONE/a/2.txt (a TWO/a/2.txt ), ale stále porovnává ostatní soubory s názvem 2.txt :
diff -q ONE/a/1.txt TWO/a/1.txt
diff -q ONE/a/b/2.txt TWO/a/b/2.txt
Upravit: Nebo více zábavy s find (další zábava jako cvičení pro čtenáře), vyberte soubory nebo adresáře, které chcete vyloučit a poté diff všechno ostatní:
$ find ONE \( -regex 'ONE/a/2.txt' -o -name b -prune \) \
-o -type f -exec bash -c 'echo diff -q "${1}" "${2/ONE/TWO}"' - {} {} \
Výše uvedený příklad vylučuje konkrétní soubor "{top}/a/2.txt", jakýkoli adresář s názvem "b" a vše ostatní je rozdílné. (Namísto jednoduchého „-name b " můžete také použít "-regex '.*/b' " - poznámka, žádné koncové "/".)
Měl jsem stejný problém, takže jsem vytvořil opravu na diff . Oprava ještě nebyla přijata, ale můžete si vytvořit svou vlastní verzi diff s opravou nebo nainstalujte na Arch Linux s balíčkem AUR.
Zde je diff patch.
Chcete-li vyloučit adresář directory/sub-directory , používám
diff -r <src-dir> <dest-dir> | grep -v directory/sub-directory
Ačkoli by to mělo fungovat pro jediné vyloučení, nemělo by to být možné pro dlouhý seznam ignorovaných, jako máte vy.