Uruchamianie sha1sum w kilku katalogach

2

Mam kilka katalogów, które mają wspólny katalog nadrzędny. W każdym katalogu znajdują się zwykłe pliki, ale nie ma innych podkatalogów. Coś takiego:

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

Chciałbym uruchomić sha1sumte pliki i uzyskać następujące pliki sum kontrolnych:

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

top/dir-1/sha1sum, na przykład, powinien zawierać tylko sumy kontrolne dla file-11i file-12:

xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx file-11
yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy file-12

Próbowałem kilka poleceń obejmujących find, sha1sum, cd, do forpętli i podpowłok, ale bez większych sukcesów.

Ostatnia rzecz: zarówno katalogi, jak i pliki mogą mieć spacje w swoich nazwach, więc każde rozwiązanie powinno to wziąć pod uwagę.

Jakieś pomysły?


Edytować. W końcu spróbowałem z:

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

Wydaje się, że działa, ale nadal nie jestem pewien, czy jest to właściwy sposób na wykonanie tego rodzaju pracy.

Francesco Turco
źródło
@Mat: Zaktualizowałem pytanie.
Francesco Turco

Odpowiedzi:

2

Lepiej jako:

cd top &&
for i in */; do (cd -- "$i" && sha1sum -- * > sha1sum); done
Stéphane Chazelas
źródło