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 .svn
ve .git
dir'leri değil, aynı zamanda *.zip
/ *.gz
/ etc adındaki dosyaları da yok sayar .
Düzenleme: Formun yollarını filtrelemek için, dir_a/file1
ancak yine diff
de aynı temel adı olan dosyaları dir_b/file1
veya dir_a/b/file1
daha 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.txt
ancak 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, find
okuyucunun alıştırması olarak bırakılan ek eğlence ile daha eğlenceli, hariç tutulacak dosyaları veya dizinleri ve ardından diğer diff
her ş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--exclude
seçenek ... boktan böyledir