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.