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


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.


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.


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.


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

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 .


3

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

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

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.


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.



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/

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.