1

Я хотел бы проверить, что процессы, которые я создаю, каждый раз выдают один и тот же результат.

Я хотел бы сделать это, создав хэш содержимого папки. Но это не должно учитывать ни время модификации файла, ни какое-либо другое.Файлы типа DS_Store/thumbs.db.

Как я могу сделать это?

1 ответ1

2

Я думаю, что вы хотите иметь один хеш, который учитывает все файлы в каталоге.

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  -

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .