Le directory degli elenchi dovrebbero funzionare; ad esempio, ecco cosa ho usato in uno script (supponendo che gnu diff),
diff -r \
--exclude="*~" \
--exclude=".svn" \
--exclude=".git" \
--exclude="*.zip*" \
--exclude="*.gz" \
--exclude="*.tar" \
...etc
...che ignora i contenuti di .svn e .git dirs, ma anche singoli file denominati *.zip /*.gz /ecc.
Modifica: Per filtrare i percorsi della forma dir_a/file1 ma ancora diff file con lo stesso nome di base, come dir_b/file1 o dir_a/b/file1 , quindi un elenco di file in diff dovrebbe essere generato (ad esempio, utilizzando find ) e il file da confrontare derivato da questi percorsi; es., dato
$ 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
si genera l'elenco dei file da confrontare, escludendo ad esempio */a/2.txt ma ancora confrontando altri file denominati 2.txt . Basta "trovare" tutti i file tranne ONE/a/2.txt (può anche essere usata una regexp qui, come .*/a/2.txt )
$ find ONE -type f \( ! -regex 'ONE/a/2.txt' \) \
-exec bash -c 'diff -q "${1}" "${2/ONE/TWO}"' - {} {} \;
che in effetti ignora ONE/a/2.txt (e TWO/a/2.txt ), ma confronta ancora gli altri file denominati 2.txt :
diff -q ONE/a/1.txt TWO/a/1.txt
diff -q ONE/a/b/2.txt TWO/a/b/2.txt
Modifica: Oppure, più divertimento con find (divertimento aggiuntivo lasciato come esercizio per il lettore), seleziona i file o le directory da escludere e poi diff tutto il resto:
$ find ONE \( -regex 'ONE/a/2.txt' -o -name b -prune \) \
-o -type f -exec bash -c 'echo diff -q "${1}" "${2/ONE/TWO}"' - {} {} \
L'esempio precedente esclude il file specifico "{top}/a/2.txt", qualsiasi directory chiamata "b", e tutto il resto è diff'd. (Invece del semplice "-name b " potresti anche usare "-regex '.*/b' " - nota, nessuna "/".)
Ho avuto lo stesso problema quindi ho creato una patch per diff . La patch deve ancora essere accettata, ma puoi creare la tua versione di diff con la patch o installa su Arch Linux con un pacchetto AUR.
Ecco il diff patch.
Per escludere la directory directory/sub-directory , io uso
diff -r <src-dir> <dest-dir> | grep -v directory/sub-directory
Tuttavia, anche se dovrebbe funzionare per una singola esclusione, non dovrebbe essere possibile per un lungo elenco ignorato come hai fatto tu.