Bir dizinin MD5 sağlama toplamını hesapla


29

Dizin içeriğini karşılaştırmak için hızlı bir yol arıyorum. Bir dizinin tamamı için md5sum (veya eşdeğeri sağlama toplamı) yapılabilir mi?

Ubuntu Linux'u Kullanma


Ayrıca, size dizinlerin nerelerde farklı olduğunu gösterecek dizinleri karşılaştırmak için diff'i kullanmak isteyebilirsiniz. unixtutorial.org/2008/06/how-to-compare-directories-in-unix
Kibbee

@Kibbee Bunu önlemek için, her dosyanın veri içeriğinden başka bir şey ve dosyaları tam olarak nasıl kontrol ettiğinize dikkat etmeniz gerekir. Verilen: [sağlama toplamları] 1. A (Dizin) - Dosya1 [ABC] - Dosya2 [CBA] 2. B (Dizin) - Dosya1 [ABC] - B1 (Dizin) - Dosya2 [CBA] 3. C (Dizin) - Dosya4 [ABC] - Dosya5 [CBA] 4. D (Dizin) - Dosya1 kopya [ABC] - Dosya2 kopya [CBA] Dizin A ve B , aynı dosyaları içermelerine rağmen aynı değildir ( B1'de , Dosya2 alt dizinde olmasına rağmen ) . Örneğinize göre, A ve C aynı kabul edilir çünkü
Jacob Lyles

Yanıtlar:


36

Emin - md5sum directory/*

Biraz daha esnek bir şeye ihtiyacınız varsa (örneğin, dizini yinelemek veya karma karşılaştırması için) md5deep'i deneyin.

apt-get install md5deep
md5deep -r directory

Bir dizin yapısını karşılaştırmak için, ona karşılaştırılacak bir özet listesi verebilirsiniz:

md5deep -r -s /directory1 > dir1hashes
md5deep -r -X dir1hashes /directory2

Bu, dizin2'deki dizin1 ile eşleşmeyen tüm dosyaları çıkarır.

Bu, 1. dizinden kaldırılmış veya dizin2'ye eklenmiş dosyaları göstermez.


Ne demek istediğimi değil, ne istediğimi yaptım :) Tekrarlı bir şekilde demek istedim ve sonunda ONE hash elde etmek istedim, ama bunun md5deep -l ile yapılabildiğini ve çıktının kendisine ait olduğunu düşünüyorum.
kirpi balığı

1
Karma sırası, tutarlı değil, bu yüzden karma önce karma çıktısını sıralamak zorunda kalacak
pufferfish 24:11

1
Deterministik bir düzen elde etmek için -j0okuyucuyu devre dışı bırakanı kullanın (man sayfasına bakın).
Johann

1
ShaneMadden @ ♦ ben yüklü md5deepile sudo apt-get install md5deepilgili Ubuntu 16.04ama beni söyler adam sayfasını okumaya çalışırken> md5deep için manuel giriş
Kasun Siyambalapitiya

27

İki dizin arasında neyin farklı olduğunu (bir şey varsa) görmek isterseniz, rsync iyi bir seçim olacaktır.

rsync --archive --dry-run --checksum --verbose /source/directory/ /destination/directory

Bu, farklı olan dosyaları listeler.


2
diff -qr /source/directory/ /destination/directory/ayrıca farklı dosyaları da gösterirdi.
Konerak

Sağlama toplamları yerine bitsel bir karşılaştırma yapmak için bir yolu var mı? Yerel sürücülerde daha hızlı olabilir.
Ali,

Çok hoş. Eğer kaynak veya hedef uzak bir klasör ise, örneğin çalışırusername@hostname:/destination/directory
Thalis K. 9

11

Sanırım bunu daha önce bu cevap ile cevapladım:

find . -xtype f -print0 | xargs -0 sha1sum | cut -b-40 | sort | sha1sum

verir: b1a5b654afee985d5daccd42d41e19b2877d66b1

Buradaki fikir, tüm dosyaların her satıra bir tane ayırıp ayırmalarını, sıralamanızı ve tek bir karma elde eden hashları elde etmektir. bu dosyaların isimlerine bağlı değildir.


5

CFV uygulaması sadece kontrol etmek ve MD5 kontrolü oluşturabilir değil, oldukça yararlıdır, aynı zamanda CRC32, sha1, sel, parite, par2 yapabilirsiniz.

Geçerli dizindeki tüm dosyalar için bir CRC32 sağlama toplamı dosyası oluşturmak için:

cfv -C

Geçerli dizindeki tüm dosyalar için bir MD5 sağlama toplamı dosyası oluşturmak için:

cfv -C -t md5 -f "geçerli dizin.md5sums"

Her alt dizin için ayrı bir sağlama toplamı dosyası oluşturmak için:

cfv -C -r

Tüm alt dizinlerdeki dosyaları içeren bir "süper" sağlama toplamı dosyası oluşturmak için:

cfv -C -rr

4

Bu askubuntu cevabında açıklandığı gibi, hashdeep kullandım: Kopyalanan dosyaların doğruluğunu kontrol edin :

Sağlama toplamlarını hesaplamak için:

 $ cd <directory1>
 $ hashdeep -rlc md5 . > ~/hashOutput.txt

Farklılıkları doğrulamak ve listelemek için:

 $ cd <directory2>
 $ hashdeep -ravvl -k ~/hashOutput.txt .
 hashdeep: Audit passed
    Input files examined: 0
   Known files expecting: 0
           Files matched: 13770
 Files partially matched: 0
             Files moved: 0
         New files found: 0
   Known files not found: 0

Bu, md5deep'e göre, yeniden adlandırılmış (taşınmış), eklenmiş ve kaldırılmış dosyaları göstermenin yanı sıra, http://www.meridiandiscovery.com/how- / validating-copy-results-using-md5deep için .


3

Bu benim için çalıştı: (ilgilendiğiniz dizinde iken çalıştırın)

md5deep -rl . | awk '{print $1}' | sort -n | md5sum

1

Her bir dosya için MD5 toplamları oluşturabilir, bu sağlama toplamlarını alfabetik olarak sıralayabilirsiniz ve bunlara (yeni satırlı veya satırsız) sahip olabilirsiniz. MD5 kriptografik olduğundan, karma sonuçlarıyla iyi çalışmalıdır.

Bazı şeyler için belirli bir düzen olmalıdır, aksi halde eşit direkler için farklı sonuçlar alırsınız.

Ve bu sadece bir olsa bile, tek dir bazı dosyayı ekleyerek tamamen sonucu değişeceğini düşünmelisiniz .directoryait .DS_Storedosyada.


Teknik olarak, farklı dizinler için aynı hash elde edilebilir. Dir A 'ab' ve 'c' içeriğine sahip 2 dosyaya sahipse ve dir B 'a' ve 'bc' içeriğine sahip 2 dosyaya sahipse, o zaman sadece dosyalardaki verilere sahip olmak aynı sonuçları verir; Farklı içerikler Birinin bir dizinin MD5Sumunu nasıl tanımlayacağından bile emin değilim.
Kibbee

1

Belirli bir durumda, bazı dosyaları dizin1'den dizin2'ye kopyalamak istediğinizi ve ardından bir md5 karşılaştırması kullanarak başarılı bir kopya doğrulamak istediğinizi varsayalım.

İlk. cd dizinine1 ve yazın:

find -type f -exec md5sum "{}" \; > ~/Desktop/md5sum.txt

Bu, directory1'deki her dosya için bir md5 toplamı içeren bir referans dosyası oluşturacaktır. Bu yapıldıktan sonra, tek yapmanız gereken cd dizinine2 ve şunu yazın:

md5sum -c ~/Desktop/md5sum.txt

Md5sum programı, her yolu md5sum.txt dosyasından alır, o dosyanın md5sum değerini hedef klasörde hesaplar ve sonra dosyayı dosyada depoladığı toplamla karşılaştırır.

İşlem tamamlandıktan sonra, 'Yani çok fazla dosya eşleşmedi' veya bunun gibi bir özeti alacaksınız.



1

Çok sayıda dosya içeren ve MassHash adlı bir komut satırı programı yazarak yedeklerin / aynaların bütünlüğünü doğrulamaya ihtiyacım vardı. Python ile yazılmış. Bir GTK + Launcher de mevcuttur. Kontrol etmek isteyebilirsiniz...

http://code.google.com/p/masshash/

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.