Я шукаю швидкий спосіб порівняння вмісту каталогів. Чи можливо зробити md5sum (або еквівалентну контрольну суму) цілого каталогу?
Використання Ubuntu Linux
Я шукаю швидкий спосіб порівняння вмісту каталогів. Чи можливо зробити 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.
-j0
що вимикає багатопотоковість (див. Сторінку "man").
md5deep
з sudo apt-get install md5deep
на , Ubuntu 16.04
але коли я спробував прочитати сторінку людини він говорить мені , що> Ні ручного введення для md5deep
Якщо ви хочете побачити, що різниться (якщо щось є) між двома каталогами, rsync було б добре підходить.
rsync --archive --dry-run --checksum --verbose /source/directory/ /destination/directory
Тут буде перераховано всі файли, які відрізняються.
diff -qr /source/directory/ /destination/directory/
також показали б різні файли.
username@hostname:/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, як пояснено у цій відповіді 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 .
Це працювало для мене: (запустіть його в каталозі, який вас цікавить)
md5deep -rl . | awk '{print $1}' | sort -n | md5sum
Ви можете створити суми MD5 для кожного окремого файлу, замовити ці контрольні суми в алфавітному порядку і мати їх (з новими рядками або без них). Оскільки MD5 є криптографічним, він повинен працювати чудово з хешами хешей.
До речі повинен бути певний порядок, інакше ви отримаєте різні результати для рівних панів.
І ви повинні враховувати , що додавання якого - або файл в одній директорії буде повністю змінити результат, навіть якщо це було тільки .directory
з .DS_Store
файлу.
Як конкретний випадок, скажімо, що ви хочете скопіювати деякі файли з каталогу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 цього файлу в цільовій папці, а потім порівнює його із сумою, яку він зберігав у файлі.
Після завершення процесу ви отримаєте резюме типу "Так і стільки файлів не збігаються" або щось подібне.
У мене була необхідність перевірити цілісність резервних копій / дзеркал, які містять велику кількість файлів, і я закінчив написання програми командного рядка під назвою MassHash. Це написано в Python. Також доступний запуск GTK +. Ви можете перевірити це ...