Daftar direktori harus berfungsi; misalnya, inilah yang saya gunakan dalam skrip (dengan asumsi gnu diff),
diff -r \
--exclude="*~" \
--exclude=".svn" \
--exclude=".git" \
--exclude="*.zip*" \
--exclude="*.gz" \
--exclude="*.tar" \
...etc
... yang mengabaikan konten .svn dan .git dirs, tetapi juga file individual bernama *.zip /*.gz /dll.
Edit: Untuk memfilter jalur dalam bentuk dir_a/file1 tapi masih diff file dengan nama dasar yang sama, seperti dir_b/file1 atau dir_a/b/file1 , lalu daftar file ke diff harus dibuat (misalnya, menggunakan find ), dan file yang akan dibandingkan 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 membuat daftar file untuk dibandingkan, tidak termasuk misalnya */a/2.txt tetapi masih membandingkan file lain bernama 2.txt . Cukup "temukan" 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 pada dasarnya mengabaikan ONE/a/2.txt (dan TWO/a/2.txt ), tetapi tetap 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
Edit: Atau, lebih seru dengan find (kesenangan tambahan tersisa sebagai latihan untuk pembaca), pilih file atau direktori untuk dikecualikan lalu diff yang lainnya:
$ 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 mengecualikan file tertentu "{top}/a/2.txt", direktori apa pun bernama "b", dan yang lainnya adalah diff'd. (Alih-alih "-name b " Anda juga bisa menggunakan "-regex '.*/b' " - perhatikan, tidak ada tanda "/".)
Saya memiliki masalah yang sama jadi saya membuat tambalan ke diff . Tambalan belum diterima, tetapi Anda dapat membuat versi diff Anda sendiri dengan tambalan atau instal di Arch Linux dengan paket AUR.
Ini adalah diff tambalan.
Untuk mengecualikan direktori directory/sub-directory , saya menggunakan
diff -r <src-dir> <dest-dir> | grep -v directory/sub-directory
Namun, meskipun seharusnya berfungsi untuk satu pengecualian, seharusnya tidak mungkin untuk daftar pengabaian yang panjang seperti yang Anda miliki.