在多个目录中运行 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

我尝试了几个涉及findsha1sumcdfor循环和子 shell 的命令,但没有取得多大成功。

最后一件事:目录和文件的名称中都可以包含空格,因此任何解决方案都应该考虑这一点。

有任何想法吗?


编辑。我终于尝试了:

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

它似乎有效,但我仍然不确定这是否是完成此类工作的正确方法。

答案1

更好的是:

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

相关内容