Yanıtlar:
Bunun için diffkomutu kullanabilirsiniz :
diff -bur folder1/ folder2/
Bu, birleşik bir bağlamla boşlukları yoksayan yinelemeli bir fark oluşturur:
-bboşluk değişikliklerini yok sayar ve -u3 satır tampon verir.
diff -rub folder1/ folder2/
-bursoğuk bir iklimde yaşamış hatırlanması kolay olurdu.
Yalnızca farklı dosyaları görmek istiyorsanız, aşağıdakileri kullanabilirsiniz:
diff -qr dir_one dir_two | sort
"Q" seçeneği yalnızca farklı olan dosyaları gösterir ancak farklı içerik göstermez ve "sort" çıktıyı alfabetik olarak düzenler.
difffarklı dosyaların her biri çift. Bir veya iki dosya farklıysa, düzinelerce dosya farklıysa, birinin yaklaşımı çok farklı olurdu. Bir diffkerede düzinelerce dosyadan çıkışta kaybolabilirim !
-x PATTERNbelirli alt dizinleri hariç tutmak için komut içerebilir . Örneğin, diff -qr repo1 repo2 -x ".git"iki dizini karşılaştırır (repo1 ve repo2), ancak ilgili dizinlerin .git klasöründeki dosyaları hariç tutar.
diffyalnızca iki dosyayı karşılaştırmakla kalmaz, bu -rseçeneği kullanarak, dizin dizinlerinin tamamını yürütebilir, alt dizinler ve her ağaçtaki karşılaştırılabilir noktalarda oluşan dosyalar arasındaki farkları tekrar tekrar kontrol edebilir.
$ man diff
...
-r --recursive
Recursively compare any subdirectories found.
...
GNU diff ise, iki dizine işaret edebilmeniz ve -r seçeneğini kullanabilmeniz gerekir.
Aksi takdirde, kullanmayı deneyin
for i in $(\ls -d ./dir1/*); do diff ${i} dir2; done
Not Yorumlar bölümünde Dennis tarafından belirtildiği gibi, aslında ls üzerinde komut yerine koymanız gerekmez. Bunu uzun süredir yapıyorum ve otopilotta bunu yapıyorum ve karşılaştırma için dosya listemi almam gereken komutu değiştiriyorum.
Ben de GNU ls ls takma ls benim geçici olarak devre dışı bırakmak için '\ ls' yapmak için unuttum böylece GNU ls tarafından döndürülen listeden renk biçimlendirme bilgilerini kaybetmek.
ls:for i in ./dir1/*
İşte iki klasördeki dosyalar arasındaki farkları gösteren bir komut dosyası. Özyineli olarak çalışır. Dir1 ve dir2'yi değiştirin.
(search() { for i in $1/*; do [ -f "$i" ] && (diff "$1/${i##*/}" "$2/${i##*/}" || echo "files: $1/${i##*/} $2/${i##*/}"); [ -d "$i" ] && search "$1/${i##*/}" "$2/${i##*/}"; done }; search "dir1" "dir2" )
Özellikle dosyaların içeriğini karşılaştırmak istemiyorsanız ve her iki dizinde de hangisinin bulunmadığını kontrol ediyorsanız, başka bir komut tarafından oluşturulan dosya listelerini karşılaştırabilirsiniz.
diff <(find DIR1 -printf '%P\n' | sort) <(find DIR2 -printf '%P\n' | sort) | grep '^[<>]'
-printf '%P\n'findçıkış yollarına kök dizini önekinin eklenmemesini söyler .
Ayrıca sort, dosyaların sırasının her iki çağrısında da aynı olmasını sağlamak için ekledim find.
grepSonunda özdeş giriş hatları ilgili bilgileri kaldırır.
Bunu dene:
diff -rq /path/to/folder1 /path/to/folder2
diffiçin GNU yardımcı programlarını indirerek komuta erişebilirsiniz .