Liste dizinleri çalışmalıdır; örneğin, bir komut dosyasında kullandığım şey (gnu diff olduğu varsayılarak),
diff -r \
--exclude="*~" \
--exclude=".svn" \
--exclude=".git" \
--exclude="*.zip*" \
--exclude="*.gz" \
--exclude="*.tar" \
...etc
... içeriğini .svnve .gitdir'leri değil, aynı zamanda *.zip/ *.gz/ etc adındaki dosyaları da yok sayar .
Düzenleme: Formun yollarını filtrelemek için, dir_a/file1ancak yine diffde aynı temel adı olan dosyaları dir_b/file1veya dir_a/b/file1daha sonra, sonradan oluşturulacak dosyaların bir listesini diff(örneğin, kullanarak find) ve bu yollardan türetilmiş olan karşılaştırmayı yapması gereken dosya listesi; örneğin, verilen
$ 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
Örneğin, hariç tutulacak */a/2.txtancak yine de adlandırılmış diğer dosyaları karşılaştırarak karşılaştırılacak dosyaların listesini oluşturursunuz 2.txt. Sadece hariç tüm dosyaları "bulmak" ONE/a/2.txt(örneğin bir regexp de kullanılabilir .*/a/2.txt)
$ find ONE -type f \( ! -regex 'ONE/a/2.txt' \) \
-exec bash -c 'diff -q "${1}" "${2/ONE/TWO}"' - {} {} \;
hangi aslında yok sayar ONE/a/2.txt(ve TWO/a/2.txt), ama yine de adlandırılmış diğer dosyaları karşılaştırır 2.txt:
diff -q ONE/a/1.txt TWO/a/1.txt
diff -q ONE/a/b/2.txt TWO/a/b/2.txt
Düzenleme: Veya, findokuyucunun alıştırması olarak bırakılan ek eğlence ile daha eğlenceli, hariç tutulacak dosyaları veya dizinleri ve ardından diğer diffher şeyi seçin:
$ find ONE \( -regex 'ONE/a/2.txt' -o -name b -prune \) \
-o -type f -exec bash -c 'echo diff -q "${1}" "${2/ONE/TWO}"' - {} {} \
Yukarıdaki örnekte, "{top} /a/2.txt" dosyası, "b" adındaki herhangi bir dizin hariç tutulur ve diğer her şey farklıdır. (Basit " -name b" yerine " " de kullanabilirsiniz -regex '.*/b'- not, iz yok "/".)
diff'in--excludeseçenek ... boktan böyledir