Я ищу быстрый способ сравнить содержимое каталогов. Можно ли сделать 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 +. Вы можете проверить это ...
Один лайнер:
find directory -exec md5sum {} \; 2>&1 | sort -k 2 | md5sum
Это перечисляет все файлы и каталоги и получает md5sum
для каждого. Затем получает md5sum
За все.
Здесь решен хитрый бит, который md5sum
не может сделать сумму для каталога, но сообщает нам следующее: md5sum: dir/sub_dir: Is a directory
. Мы просто перемещаем это сообщение в стандартный вывод.