Рассчитать контрольную сумму MD5 каталога

Я ищу быстрый способ сравнить содержимое каталога. Можно ли сделать md5sum (или эквивалентную контрольную сумму) для всего каталога?

Использование Ubuntu Linux

9 ответов

Решение

Конечно - md5sum directory/*

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

apt-get install md5deep
md5deep -r directory

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

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

Это выведет все файлы в каталоге 2, которые не соответствуют каталогу 1.

Это не покажет файлы, которые были удалены из каталога1 или файлы, которые были добавлены в каталог2.

Если вы хотите увидеть разницу (если вообще что-то) между двумя каталогами, лучше всего подойдет rsync.

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

Это перечислит любые файлы, которые отличаются.

Я думаю, что я ответил на этот вопрос раньше:

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

дает: b1a5b654afee985d5daccd42d41e19b2877d66b1

идея заключается в том, что вы хэшируете все файлы, вырезаете хэши по одному на строку, сортируете их и хешируете, получая один хеш. это не зависит от имен файлов.

Приложение cfv весьма полезно, оно не только может проверять и создавать контрольные суммы MD5, но также может выполнять CRC32, sha1, torrent, par, par2.

создать файл контрольной суммы CRC32 для всех файлов в текущем каталоге:

CFV-C

создать файл контрольной суммы MD5 для всех файлов в текущем каталоге:

cfv -C -t md5 -f "текущий каталог.md5sums"

Чтобы создать отдельный файл контрольной суммы для каждого подкаталога:

cfv -C -r

Чтобы создать "супер" файл контрольной суммы, содержащий файлы во всех подкаталогах:

cfv -C -rr

Я использовал hashdeep, как объяснено в ответе аскубунту: Проверьте правильность скопированных файлов:

Чтобы вычислить контрольные суммы:

 $ 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 в том, что оно показывает переименованные (перемещенные), добавленные и удаленные файлы, а также позволяет избежать проблемы с файлами нулевой длины, указанными в нижней части http://www.meridiandiscovery.com/how-to/validating-copy-results-using-md5deep.

Это сработало для меня: (запустите его в интересующем вас каталоге)

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

В качестве конкретного случая предположим, что вы хотите скопировать некоторые файлы из каталога 1 в каталог 2, а затем вы хотите проверить успешное копирование, используя сравнение md5.

Первый. перейдите в каталог directory1 и введите:

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

который создаст ссылочный файл, содержащий сумму md5 для каждого файла в directory1. Как только это будет сделано, все, что вам нужно сделать, это перейти в каталог directory2 и набрать:

md5sum -c ~/Desktop/md5sum.txt

Программа md5sum извлекает каждый путь из файла md5sum.txt, вычисляет md5sum этого файла в папке назначения и затем сравнивает его с суммой, которую он сохранил в файле.

После того, как процесс будет завершен, вы получите сводку, такую ​​как "Так много файлов не совпадают" или что-то в этом роде.

Вы можете создать суммы MD5 для каждого отдельного файла, упорядочить эти контрольные суммы в алфавитном порядке и иметь их (с символами новой строки или без них). Поскольку MD5 криптографичен, он должен прекрасно работать с хэшами хэшей.

Там должен быть определенный порядок вещей, иначе вы получите разные результаты для равных dirs.

И вы должны учитывать, что добавление какого-либо файла в один каталог полностью изменит результат, даже если это был просто .directory из .DS_Store файл.

Мне нужно было проверить целостность резервных копий / зеркал, которые содержат большое количество файлов, и в итоге я написал программу командной строки под названием MassHash. Это написано на Python. GTK+ Launcher также доступна. Вы можете проверить это...

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

Один лайнер:

find directory -exec md5sum {} \; 2>&1 | sort -k 2 | md5sum

Это перечисляет все файлы и каталоги и получает md5sumдля каждого. Затем получает md5sum За все.

Здесь решена хитрость: md5sum не может сделать сумму для каталога, но сообщает нам следующее: md5sum: dir/sub_dir: Is a directory. Мы просто перемещаем это сообщение в стандартный вывод.

Другие вопросы по тегам