Oblicz sumę kontrolną MD5 katalogu

29

Szukam szybkiego sposobu na porównanie zawartości katalogu. Czy można zrobić sumę kontrolną md5 (lub równoważną sumę kontrolną) dla całego katalogu?

Korzystanie z systemu Ubuntu Linux

rozdymka tygrysia
źródło
Możesz także rozważyć użycie diff do porównywania katalogów, które faktycznie pokażą Ci, gdzie różnią się katalogi. unixtutorial.org/2008/06/how-to-compare-directories-in-unix
Kibbee
@Kibbee Aby temu zapobiec, musisz wziąć pod uwagę coś innego niż zawartość danych każdego pliku i dokładnie to, jak sumujesz pliki. Biorąc pod uwagę: [sumy kontrolne] 1. A (katalog) - plik1 [ABC] - plik2 [CBA] 2. B (katalog) - plik1 [ABC] - B1 (katalog) - plik2 [CBA] 3. C (katalog) - plik4 [ABC] - File5 [CBA] 4. D (Directory) - plik 1 kopia [ABC] - File2 kopii [CBA] katalog i B nie są identyczne, pomimo, że te same pliki (choć w B1 , File2 w podkatalogu) . W twoim przykładzie A i C można uznać za identyczne, ponieważ
Jacob Lyles,

Odpowiedzi:

36

Pewnie - md5sum directory/*

Jeśli potrzebujesz czegoś bardziej elastycznego (powiedzmy, do rekurencji katalogu lub porównania skrótu), spróbuj md5deep.

apt-get install md5deep
md5deep -r directory

Aby porównać strukturę katalogów, możesz dać jej listę skrótów do porównania:

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

Spowoduje to wyświetlenie wszystkich plików w katalogu2, które nie pasują do katalogu1.

To nie pokaże plików, które zostały usunięte z katalogu 1 lub plików, które zostały dodane do katalogu 2.

Shane Madden
źródło
Nie to, co miałem na myśli, ale to, co chciałem :) Miałem na myśli rekurencyjnie, i na końcu otrzymałem JEDEN skrót, ale myślę, że można to zrobić za pomocą md5deep -l i mieszania samego wyjścia.
pufferfish
1
Kolejność mieszania nie jest spójna, więc musiałbym posortować dane wyjściowe przed mieszaniem
pufferfish
1
Aby uzyskać porządek deterministyczny, użyj opcji, -j0która wyłącza wielowątkowość (patrz strona podręcznika).
Johann
1
@ ShaneMadden ♦ zainstalowałem md5deepz sudo apt-get install md5deepdnia Ubuntu 16.04ale kiedy próbowałem przeczytać stronę man on mi mówi, że> No ręczne wprowadzanie do md5deep
Kasun Siyambalapitiya
27

Jeśli chcesz zobaczyć, co różni się (jeśli w ogóle) między dwoma katalogami, rsync będzie dobrym wyborem.

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

Spowoduje to wyświetlenie listy różnych plików.

JakePaulus
źródło
2
diff -qr /source/directory/ /destination/directory/pokaże także pliki, które się różnią.
Konerak,
Czy istnieje sposób na porównanie bitowe zamiast sum kontrolnych? Może być szybszy na dyskach lokalnych.
Ali
Bardzo dobrze. Działa, jeśli źródłem lub miejscem docelowym są również zdalne foldery np.username@hostname:/destination/directory
Thalis K.
11

myślę, że odpowiedziałem już na to z następującą odpowiedzią:

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

daje: b1a5b654afee985d5daccd42d41e19b2877d66b1

Chodzi o to, że hashujesz wszystkie pliki wycinając skróty jeden w linii, sortujesz je i hash, co daje jeden skrót. nie zależy to od nazw plików.

Dan D.
źródło
5

Aplikacja cfv jest bardzo przydatna, nie tylko może sprawdzać i tworzyć sumy kontrolne MD5, może także wykonywać CRC32, sha1, torrent, par, par2.

aby utworzyć plik sumy kontrolnej CRC32 dla wszystkich plików w bieżącym katalogu:

cfv -C

aby utworzyć plik sumy kontrolnej MD5 dla wszystkich plików w bieżącym katalogu:

cfv -C -t md5 -f "bieżący katalog.md5sums"

Aby utworzyć osobny plik sumy kontrolnej dla każdego podkatalogu:

cfv -C -r

Aby utworzyć „super” plik sumy kontrolnej zawierający pliki we wszystkich podkatalogach:

cfv -C -rr
Hubert Kario
źródło
4

Użyłem hashdeep, jak wyjaśniono w tej odpowiedzi askubuntu: Sprawdź poprawność skopiowanych plików :

Aby obliczyć sumy kontrolne:

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

Aby zweryfikować i wymienić różnice:

 $ 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

Ma to przewagę nad md5deep, ponieważ wyświetla zmienione (przeniesione), dodane i usunięte pliki, a także pozwala uniknąć problemu z plikami o długości 0 wskazanymi na dole http://www.meridiandiscovery.com/how- do / validating-copy-results-using-md5deep .

Argyle
źródło
3

To zadziałało dla mnie: (uruchom go w katalogu, który Cię interesuje)

md5deep -rl . | awk '{print $1}' | sort -n | md5sum
spodnie kota
źródło
1

Możesz utworzyć sumy MD5 każdego pliku, uporządkować te sumy kontrolne alfabetycznie i mieć je (z nowymi liniami lub bez). Ponieważ MD5 jest kryptograficzny, powinien dobrze działać z haszami skrótów.

Powinna istnieć pewna kolejność rzeczy, w przeciwnym razie otrzymasz różne wyniki dla równych reż.

I należy wziąć pod uwagę, że dodanie jakiś plik do jednego katalogu będzie całkowicie zmienić wynik, nawet jeśli to był tylko .directoryz .DS_Storepliku.

Martin Ueding
źródło
Technicznie można uzyskać ten sam skrót dla różnych katalogów. Gdyby katalog A miał 2 pliki z zawartością „ab” i „c”, a katalog B miał 2 pliki z zawartością „a” i „bc”, to haszowanie tylko danych w plikach dałoby takie same wyniki, nawet jeśli mają one pliki z inna zawartość. Nie jestem nawet pewien, jak zdefiniować MD5Sum katalogu.
Kibbee,
1

Jako konkretny przypadek, powiedzmy, że chcesz skopiować niektóre pliki z katalogu 1 do katalogu 2, a następnie chcesz zweryfikować udaną kopię za pomocą porównania md5.

Pierwszy. cd do katalogu 1 i wpisz:

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

który utworzy plik referencyjny zawierający sumę md5 dla każdego pliku w katalogu1. Po wykonaniu tej czynności wystarczy wykonać cd do katalogu 2 i wpisać:

md5sum -c ~/Desktop/md5sum.txt

Program md5sum pobiera każdą ścieżkę z pliku md5sum.txt, oblicza md5sum tego pliku w folderze docelowym, a następnie porównuje go z sumą zapisaną w pliku.

Po zakończeniu procesu otrzymasz podsumowanie, takie jak „Tak wiele plików się nie zgadzało” lub coś w tym rodzaju.

Joel
źródło
1

Potrzebowałem zweryfikować integralność kopii zapasowych / kopii lustrzanych, które zawierają dużą liczbę plików, i ostatecznie napisałem program wiersza polecenia o nazwie MassHash. Jest napisany w Pythonie. Dostępny jest także program uruchamiający GTK +. Możesz to sprawdzić ...

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

Jonathan
źródło