ОНОВЛЕННЯ: Пройшло декілька років, як я опублікував цю відповідь, а тим часом я переписав і вдосконалив сценарій, який я тут подав кілька разів. Я вирішив перезавантажити новий сценарій як абсолютно нову відповідь. Я б дуже рекомендував його над цим.
ВСТУП
Я помічав, що порядок, у якому команда find видає знайдені елементи в каталозі, змінюється в однакових каталогах на різних розділах. Якщо ви порівнюєте хеші того самого каталогу, вам не доведеться турбуватися про це, але якщо ви отримуєте хеші, щоб переконатися, що жодні файли не були пропущені або пошкоджені під час копіювання, вам потрібно включити додатковий рядок для сортування вмісту каталогу та його елементів. Наприклад, відповідь Метью Бонсака досить елегантна:
find ./path/to/directory/ -type f -print0 | xargs -0 sha1sum
Але якщо ви використовуєте його для порівняння скопійованого каталогу з оригінальним, ви надішлите вихід у файл txt, який ви порівняєте з виведеним списком з іншого каталогу за допомогою Kompare або WinMerge, або просто отримавши хеші кожного листа . Вся справа в тому, що порядок, у якому інструмент пошуку виводитиме вміст, може змінюватись в одній директорії до іншої, Kompare подаватиме багато відмінностей, оскільки хеші не були обчислені в одному порядку. Не велика справа для невеликих каталогів, але досить дратує, якщо ви маєте справу з 30000 файлами. Таким чином, ви зробите додаткові кроки сортування результатів, щоб полегшити порівняння хеш-списків між двома каталогами.
find ./path/to/directory/ -type f -print0 | xargs -0 sha1sum > sha1sum_list_unsorted.txt
sort sha1sum_list_unsorted.txt > sha1sum_list_sorted.txt
Це дозволить сортувати вихід, так що файли з тим же хешем будуть знаходитися в одних і тих же рядках під час запуску програми розмежування (за умови, що в новому каталозі відсутні файли).
І НА СКРИПТІ ...
Ось сценарій, який я написав. Він робить те саме, що робить відповідь find / xarg, але сортує файли, перш ніж отримати sha1sum (зберігаючи їх у тому самому каталозі). Перший рядок сценарію знаходить усі файли в каталозі рекурсивно. Наступний сортує результати за алфавітом. Наступні два дістає відсортований вміст і додає до файлів у відсортованому списку ша1сум та лапки, створюючи великий скрипт оболонки, який обчислює хеш кожного файлу, по одному та виводить його у content_sha1sum.txt.
#!/bin/bash
find . -type f > content.txt
sort content.txt > content_sorted.txt
awk '{print "sha1sum \""$0}' content_sorted.txt > temp.txt
awk '{print $0"\""}' temp.txt > get_sha1.sh
chmod +x get_sha1.sh
./get_sha1.sh > content_sha1sum.txt
rm content.txt
rm content_sorted.txt
rm temp.txt
rm get_sha1.sh
xdg-open content_sha1sum.txt
Сподіваюся, це допомагає.