Czy możesz użyć OpenSSL do wygenerowania skrótu md5 lub sha w katalogu plików?

0

Interesuje mnie przechowywanie wskaźnika integralności pliku / katalogu między dwiema zarchiwizowanymi kopiami katalogów. To około 1 TB danych przechowywanych rekurencyjnie na dyskach twardych. Czy istnieje sposób wykorzystania OpenSSL do wygenerowania pojedynczego skrótu dla wszystkich plików, które można wykorzystać do porównania dwóch kopii danych lub w późniejszym czasie w celu sprawdzenia, czy dane się nie zmieniły?

Kieveli
źródło

Odpowiedzi:

3

Możesz rekurencyjnie wygenerować wszystkie skróty, połączyć je w jeden plik, a następnie wygenerować skrót tego pliku.

AaronLS
źródło
W przypadku pojedynczego polecenia coś podobnego md5 -q <(find . -type f 2>/dev/null | xargs md5 -q | sort)działa dobrze w Bash i nie wymaga pliku tymczasowego. Zmień, jeśli twój system używa md5sumzamiast md5. Należy również pamiętać, że sortmoże zachowywać się inaczej na różnych platformach, co wpłynie na ostateczną sumę kontrolną, jeśli kolejność jest inna. Dodaj flagi podobne ! -name ".DS_Store"do komponentu find, aby zignorować niektóre pliki, takie jak pliki .DS_Store w Mac OS X, które mogą zrzucić sumę kontrolną, ponieważ są generowane przez system operacyjny.
Justin Mrkva,
2

Nie można wykonać skumulowanego skrótu dla wszystkich, aby utworzyć pojedynczy skrót, ale można go najpierw skompresować, a następnie obliczyć skrót:

$tar -czpf archive1.tar.gz folder1/
$tar -czpf archive2.tar.gz folder2/
$openssl md5 archive1.tar.gz archive2.tar.gz

rekurencyjnie mieszać każdy plik:

$find . -type f -exec openssl md5 {} +
John T.
źródło
1
1 TB danych - nie ma miejsca na ich tarowanie. Czy istnieje sposób rekurencyjnego generowania skrótów wszystkich plików?
Kieveli,
tak, dodałem to do mojej odpowiedzi.
John T
fajny pomysł na smołę, ale nie zawsze ma zastosowanie. metoda „znajdź” jest ogólnie lepsza. jeśli nie ma miejsca na tarball:% tar -cf - folder | openssl md5
akira,
2

Wykonanie sumy md5 na tarie nigdy by nie działało, chyba że wszystkie metadane (data utworzenia itp.) Byłyby identyczne, ponieważ tar przechowuje je jako część swojego archiwum.

Prawdopodobnie zrobiłbym sumę md5 zawartości wszystkich plików:

find folder1 -type f | sort | tr '\n' '\0' | xargs -0 cat | openssl md5
find folder2 -type f | sort | tr '\n' '\0' | xargs -0 cat | openssl md5
Rudedog
źródło
2

Prawdopodobnie powinieneś być zainteresowany wydaniem skrótu w formacie coreutils (identycznym jak md5sum -b)

Tak więc komenda md5sum może być:

find . -path '*/.svn' -prune -o -type f -print0 | sort | tr '\n' '\0' | xargs -0 openssl dgst -md5 -r 

lub z wyjściem do pliku

find . -path '*/.svn' -prune -o -type f -print0 | sort | tr '\n' '\0' | xargs -0 openssl dgst -md5 -r > ../mydigest.md5
c-narzędzia
źródło