複数のディレクトリでsha1sumを実行する

複数のディレクトリでsha1sumを実行する

共通の親ディレクトリを共有する複数のディレクトリがあります。各ディレクトリには通常のファイルがありますが、他のサブディレクトリはありません。このような:

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

sha1sumこのファイルを実行し、次のチェックサムファイルを取得したいと思います。

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

top/dir-1/sha1sumたとえば、合計のみを含める必要があるチェックサムは次のとおりですfile-11file-12

xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx file-11
yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy file-12

find、、、、ループ、サブシェルに関連するいくつかのコマンドを試しましたがsha1sum、大きな成功を収めませんでした。cdfor

最後に:ディレクトリとファイルの両方に名前にスペースを含めることができるため、すべてのソリューションでこの点を考慮する必要があります。

どんなアイデアがありますか?


編集する。私はついに試しました:

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

うまくいくようですが、これがこの種の作業を行う正しい方法であるかどうかはまだわかりません。

ベストアンサー1

より良い点は次のとおりです。

cd top &&
for i in */; do (cd -- "$i" && sha1sum -- * > sha1sum); done

おすすめ記事