ОБНОВЛЕНИЕ: Прошло несколько лет с тех пор, как я опубликовал этот ответ, и в то же время я переписал и улучшил сценарий, который я представил здесь несколько раз. Я решил опубликовать новый сценарий как новый ответ. Я очень рекомендую это по этому.
ВВЕДЕНИЕ
Я заметил, что порядок, в котором команда find выводит найденные элементы в каталоге, варьируется в пределах одинаковых каталогов на разных разделах. Если вы сравниваете хэши одного и того же каталога, вам не нужно об этом беспокоиться, но если вы получаете хэши, чтобы убедиться, что файлы не были пропущены или повреждены во время копирования, вам необходимо добавить дополнительную строку для сортировка содержимого каталога и его элементов. Например, ответ Мэтью Бонсака довольно элегантный:
find ./path/to/directory/ -type f -print0 | xargs -0 sha1sum
Но если вы используете его для сравнения скопированного каталога с его оригиналом, вы отправите вывод в текстовый файл, который вы сравните с выводимым списком из другого каталога, используя 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 (сохраняя их в том же каталоге). Первая строка скрипта находит все файлы в каталоге рекурсивно. Следующий сортирует результаты в алфавитном порядке. Следующие два, берет отсортированный контент и добавляет к файлам в отсортированном списке sha1sum и кавычки, создавая большой скрипт оболочки, который вычисляет хэш каждого файла по одному и выводит его в 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
Надеюсь это поможет.