Bu karşılaştırmayı yapmak için iyi bir yol kullanmaktır find
ile md5sum
daha sonra, diff
.
Örnek
Dizindeki tüm dosyaları listelemek için find komutunu kullanın, ardından her dosya için md5 karmasını hesaplayın ve dosya adına göre sıralayarak bir dosyaya aktarın:
find /dir1/ -type f -exec md5sum {} + | sort -k 2 > dir1.txt
Aynı işlemi başka bir dizine de yapın:
find /dir2/ -type f -exec md5sum {} + | sort -k 2 > dir2.txt
Sonra sonuç iki dosya ile karşılaştırın diff
:
diff -u dir1.txt dir2.txt
Veya işlem değişikliğini kullanarak tek bir komut olarak:
diff <(find /dir1/ -type f -exec md5sum {} + | sort -k 2) <(find /dir2/ -type f -exec md5sum {} + | sort -k 2)
Yalnızca değişiklikleri görmek istiyorsanız:
diff <(find /dir1/ -type f -exec md5sum {} + | sort -k 2 | cut -f1 -d" ") <(find /dir2/ -type f -exec md5sum {} + | sort -k 2 | cut -f1 -d" ")
Cut komutu, diff ile karşılaştırılacak yalnızca karma (ilk alan) yazdırır. Aksi taktirde diff, her satır, karma aynı olsa bile dizin yolları farklı olduğundan yazdırır.
Ama hangi dosyanın değiştiğini bilmiyorsun.
Bunun için, böyle bir şey deneyebilirsiniz
diff <(find /dir1/ -type f -exec md5sum {} + | sort -k 2 | sed 's/ .*\// /') <(find /dir2/ -type f -exec md5sum {} + | sort -k 2 | sed 's/ .*\// /')
Bu strateji, karşılaştırılacak iki dizin aynı makinede olmadığında ve dosyaların her iki dizinde de eşit olduğundan emin olmanız gerektiğinde çok faydalıdır.
İşi yapmanın bir başka iyi yolu Git'in diff
komutunu kullanmak (dosyalar farklı izinlere sahip olduğunda sorunlara neden olabilir -> her dosya çıkışta listeleniyorsa):
git diff --no-index dir1/ dir2/
bash --version
?