Direktori listing harus berfungsi; misalnya, inilah yang saya gunakan dalam sebuah skrip (dengan asumsi gnu diff),
diff -r \
--exclude="*~" \
--exclude=".svn" \
--exclude=".git" \
--exclude="*.zip*" \
--exclude="*.gz" \
--exclude="*.tar" \
...etc
... yang mengabaikan isi .svndan .gitdirektori, tetapi juga file individual bernama *.zip/ *.gz/ etc.
Sunting: Untuk memfilter jalur formulir dir_a/file1tetapi masih diffmenggunakan nama file yang sama, seperti dir_b/file1atau dir_a/b/file1, maka daftar file yang diffharus dihasilkan (misalnya, menggunakan find), dan file untuk membandingkan berasal dari jalur ini; mis. diberikan
$ 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
Anda menghasilkan daftar file untuk dibandingkan, tidak termasuk misalnya */a/2.txttetapi masih membandingkan file lain bernama 2.txt. Cukup "cari" semua file kecuali ONE/a/2.txt(regexp juga dapat digunakan di sini, seperti .*/a/2.txt)
$ find ONE -type f \( ! -regex 'ONE/a/2.txt' \) \
-exec bash -c 'diff -q "${1}" "${2/ONE/TWO}"' - {} {} \;
yang berlaku mengabaikan ONE/a/2.txt(dan TWO/a/2.txt), tetapi masih membandingkan file lain bernama 2.txt:
diff -q ONE/a/1.txt TWO/a/1.txt
diff -q ONE/a/b/2.txt TWO/a/b/2.txt
Sunting: Atau, lebih banyak kesenangan dengan find(kesenangan tambahan tersisa sebagai latihan untuk pembaca), pilih file atau direktori yang akan dikecualikan dan kemudian yang difflainnya:
$ find ONE \( -regex 'ONE/a/2.txt' -o -name b -prune \) \
-o -type f -exec bash -c 'echo diff -q "${1}" "${2/ONE/TWO}"' - {} {} \
Contoh di atas tidak termasuk file spesifik "{top} /a/2.txt", direktori apa pun yang bernama "b", dan yang lainnya berbeda. (Alih-alih sederhana " -name b" Anda juga bisa menggunakan " -regex '.*/b'" - note, no trailing "/".)
diff's--excludepilihan begitu menyebalkan ...