Обчисліть контрольну суму MD5 каталогу


29

Я шукаю швидкий спосіб порівняння вмісту каталогів. Чи можливо зробити md5sum (або еквівалентну контрольну суму) цілого каталогу?

Використання Ubuntu Linux


Ви також можете розглянути використання diff для порівняння каталогів, які фактично покажуть вам, де каталоги відрізняються. unixtutorial.org/2008/06/how-to-compare-directories-in-unix
Kibbee

@Kibbee Щоб запобігти цьому, потрібно враховувати щось інше, ніж вміст даних кожного файлу та те, як саме ви перевіряєте суму файлів. Дано: [контрольні суми] 1. A (Каталог) - File1 [ABC] - File2 [CBA] 2. B (Каталог) - File1 [ABC] - B1 (Каталог) - File2 [CBA] 3. C (Каталог) - File4 [ABC] - File5 [CBA] 4. D (Каталог) - Файл1 копія [ABC] - Файл2 Копія [CBA] Каталог A і B не ідентичні, хоча містять однакові файли (хоча у B1 , File2 знаходиться у підкаталозі) . У вашому прикладі A і C вважатимуться однаковими, оскільки
Jacob Lyles

Відповіді:


36

Звичайно - md5sum directory/*

Якщо вам потрібно щось трохи гнучкіше (скажімо, для рекурсії каталогу або хеш-порівняння), спробуйте md5deep.

apt-get install md5deep
md5deep -r directory

Щоб порівняти структуру каталогу, ви можете надати їй список хешей для порівняння:

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

Це виведе всі файли в каталозі2, які не відповідають папці1.

Це не відображатиме файли, вилучені з каталогу1, або файли, додані до каталогу2.


Не те, що я мав на увазі, але те, що я хотів :) Я мав на увазі рекурсивно, і отримую ОДИН хеш в кінці, але я думаю, що це можна зробити з md5deep -l і хеширующим самим висновком.
pufferfish

1
Порядок хешування не узгоджується, тому доведеться сортувати вихід до хешування
pufferfish

1
Щоб отримати детермінований порядок, використовуйте, -j0що вимикає багатопотоковість (див. Сторінку "man").
Йоганн

1
@ ShaneMadden ♦ Я встановив md5deepз sudo apt-get install md5deepна , Ubuntu 16.04але коли я спробував прочитати сторінку людини він говорить мені , що> Ні ручного введення для md5deep
Kasun Siyambalapitiya

27

Якщо ви хочете побачити, що різниться (якщо щось є) між двома каталогами, rsync було б добре підходить.

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

Тут буде перераховано всі файли, які відрізняються.


2
diff -qr /source/directory/ /destination/directory/також показали б різні файли.
Конерак

Чи є спосіб виконати побітове порівняння замість контрольних сум? Це може бути швидше на локальних накопичувачах.
Алі

Дуже хороша. Працює, якщо джерело або пункт призначення також є віддаленою папкою, наприкладusername@hostname:/destination/directory
Thalis K.

11

я думаю, що раніше я відповідав на цю відповідь:

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

дає: b1a5b654afee985d5daccd42d41e19b2877d66b1

ідея полягає в тому, щоб ви хеш усі файли вирізали хеші по одному рядку, сортуйте їх та хеші, що дають один хеш. це не залежить від назв файлів.


5

Додаток cfv є досить корисним, він не тільки може перевіряти та створювати контрольні суми MD5, він також може робити CRC32, sha1, torrent, par, par2.

створити файл контрольної суми CRC32 для всіх файлів у поточному каталозі:

cfv -C

створити файл контрольної суми MD5 для всіх файлів у поточному каталозі:

cfv -C -t md5 -f "поточний каталог.md5sums"

Щоб створити окремий файл контрольної суми для кожного підкаталога:

cfv -C -r

Щоб створити "супер" файл контрольної суми, що містить файли у всіх підкаталогах:

cfv -C -rr

4

Я використовував hashdeep, як пояснено у цій відповіді askubuntu: Перевірте правильність скопійованих файлів :

Для розрахунку контрольних сум:

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

Щоб перевірити та перелічити відмінності:

 $ 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

Це має перевагу перед md5deep тим, що він покаже перейменовані (переміщені), додані та вилучені файли, а також уникне проблеми з файлами довжиною 0, зазначеними внизу http://www.meridiandiscovery.com/how- до / перевіряти-копіювати-результати-використання-md5deep .


3

Це працювало для мене: (запустіть його в каталозі, який вас цікавить)

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

1

Ви можете створити суми MD5 для кожного окремого файлу, замовити ці контрольні суми в алфавітному порядку і мати їх (з новими рядками або без них). Оскільки MD5 є криптографічним, він повинен працювати чудово з хешами хешей.

До речі повинен бути певний порядок, інакше ви отримаєте різні результати для рівних панів.

І ви повинні враховувати , що додавання якого - або файл в одній директорії буде повністю змінити результат, навіть якщо це було тільки .directoryз .DS_Storeфайлу.


Технічно можна отримати один і той же хеш для різних каталогів. Якщо у dir A було 2 файли із вмістом 'ab' та 'c', а у dir B було 2 файли із вмістом 'a' та 'bc', то хеширование лише даних у файлах дало б однакові результати, навіть якщо вони мають файли з різний зміст. Я навіть не впевнений, як можна було б визначити MD5Sum каталогу.
Kibbee

1

Як конкретний випадок, скажімо, що ви хочете скопіювати деякі файли з каталогу1 в каталог2, а потім ви хочете перевірити вдалу копію за допомогою порівняння md5.

Спочатку. cd до каталогу1 та введіть:

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

який створить довідковий файл, що містить суму md5 для кожного файлу в каталозі1. Як тільки це буде зроблено, все, що вам потрібно зробити, - це CD в каталог2 та введіть:

md5sum -c ~/Desktop/md5sum.txt

Програма md5sum вибирає кожен шлях з файлу md5sum.txt, обчислює md5sum цього файлу в цільовій папці, а потім порівнює його із сумою, яку він зберігав у файлі.

Після завершення процесу ви отримаєте резюме типу "Так і стільки файлів не збігаються" або щось подібне.



1

У мене була необхідність перевірити цілісність резервних копій / дзеркал, які містять велику кількість файлів, і я закінчив написання програми командного рядка під назвою MassHash. Це написано в Python. Також доступний запуск GTK +. Ви можете перевірити це ...

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.