Я думаю, что вы хотите иметь один хеш, который учитывает все файлы в каталоге.
find . -name thumbs.db -prune -o -type f -exec cat {} \; | shasum -
Примечание. Сначала я попытался использовать tar, но большинство форматов архивов содержат временные метки, которые не дают желаемых результатов.
Чтобы проверить это, я выбрал исходный каталог и сгенерировал для него sha следующим образом. Обратите внимание, что я сократил команду для генерации ша для этой иллюстрации, '-name thumbs.db -prune -o' используется, только если вам нужно исключить некоторые файлы.
$ find Temp\ 20060810/ -type f | wc -l
7207
$ du -hs Temp\ 20060810/
3.6G Temp 20060810/
$ (cd ../Temp\ 20060810/ && find . -type f -exec cat {} \; | shasum -)
f35837a72e7c94c974ed76723ac4fcff39e62646 -
Затем я создал несколько копий, используя разные техники:
$ cp -r Temp\ 20060810/ ~/tmp/TEST1
$ (cd Temp\ 20060810/ && tar -cf - .) | (mkdir ~/tmp/TEST2 && tar -C ~/tmp/TEST2 -xf - )
$ rsync -a Temp\ 20060810/ ~/tmp/TEST3/
$ cp -aL Temp\ 20060810/ ~/tmp/TEST4/
Наконец, сравните хэш копий с хешем оригинала:
$ (cd ~/tmp/TEST1 && find . -type f -exec cat {} \; | shasum -)
f35837a72e7c94c974ed76723ac4fcff39e62646 -
$ (cd ~/tmp/TEST2 && find . -type f -exec cat {} \; | shasum -)
f35837a72e7c94c974ed76723ac4fcff39e62646 -
$ (cd ~/tmp/TEST3 && find . -type f -exec cat {} \; | shasum -)
f35837a72e7c94c974ed76723ac4fcff39e62646 -
$ (cd ~/tmp/TEST4 && find . -type f -exec cat {} \; | shasum -)
f35837a72e7c94c974ed76723ac4fcff39e62646 -