Executando o sha1sum em vários diretórios

2

Eu tenho vários diretórios que compartilham um diretório pai comum. Em cada diretório existem arquivos regulares, mas nenhum outro subdiretório. Algo parecido com isto:

top/dir-1
top/dir-1/file-11
top/dir-1/file-12
top/dir-2
top/dir-2/file-21
top/dir-2/file-22
top/dir-3
top/dir-3/file-31
top/dir-3/file-32

Gostaria de executar sha1sum nesses arquivos e obter os seguintes arquivos de soma de verificação:

top/dir-1/sha1sum
top/dir-2/sha1sum
top/dir-3/sha1sum

top/dir-1/sha1sum , por exemplo, deve conter apenas as somas de verificação para file-11 e file-12 :

xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx file-11
yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy file-12

Eu tentei vários comandos envolvendo find , sha1sum , cd , for loop e subshells, mas sem muito sucesso.

A última coisa: os diretórios e arquivos podem ter espaços em seus nomes, portanto, qualquer solução deve considerar isso.

Alguma idéia?

Editar. Eu finalmente tentei com:

cd top
for i in *; do cd "${i}"; (sha1sum * > sha1sum); cd ..; done

Parece funcionar, mas ainda não tenho certeza se é o jeito certo de fazer esse tipo de trabalho.

    
por Francesco Turco 16.09.2012 / 14:00

1 resposta

2

Melhor como:

cd top &&
for i in */; do (cd -- "$i" && sha1sum -- * > sha1sum); done
    
por 16.09.2012 / 17:37