Назад | Перейти на главную страницу

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

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

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

Конечно - 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 "current directory.md5sums"

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

cfv -C -r

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

cfv -C -rr

Я использовал 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-to/validating-copy-results-using-md5deep.

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

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

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

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

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

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

Первый. cd в directory1 и введите:

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

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

md5sum -c ~/Desktop/md5sum.txt

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

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

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

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. Мы просто перемещаем это сообщение в стандартный вывод.