Eu acho que você quer ter um único hash que leva em conta todos os arquivos em um diretório.
find . -name thumbs.db -prune -o -type f -exec cat {} \; | shasum -
Note que tentei usar o tar primeiro, mas a maioria dos formatos de arquivo inclui os timestamps, que não fornecem os resultados desejados.
Para testar isso, selecionei um diretório de origem e gerou o sha para ele da seguinte maneira. Note que encurtei o comando para gerar o sha para esta ilustração, o '-name thumbs.db -prune -o' só é usado se você precisar excluir alguns arquivos.
$ 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 -
Depois criei algumas cópias usando técnicas diferentes:
$ 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/
Por fim, compare o hash das cópias ao hash do original:
$ (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 -