如何为文件夹中的每个文件递归创建 .sha256 哈希文件?

如何为文件夹中的每个文件递归创建 .sha256 哈希文件?

示例我有这些文件

/sdcard/testfolder/file1
/sdcard/testfolder/file2
/sdcard/testfolder/file3
/sdcard/testfolder/file4.ext

我想为每个创建 .sha256 文件

/sdcard/testfolder/file1.sha256
/sdcard/testfolder/file2.sha256
/sdcard/testfolder/file3.sha256
/sdcard/testfolder/file4.ext.sha256

该方法应该适用于文件名和文件夹名称中每个可能的有效字符

我的出发点是尝试使用 find

注意:我正在使用“toybox 0.8.0-android”中的查找,无法更改它(不可变的不可根文件系统),但它似乎功能齐全。我的 shell 是“MirBSD Korn Shell”2014https://launchpad.net/mksh我也无法改变它

find /sdcard/testfolder -type file -exec echo {} \;

例如返回文件列表,每行一个文件

因此,一种方法是将 'echo {}' 替换为等价的

sha256sum /sdcard/testfolder/file4.ext > /sdcard/testfolder/file4.ext.sha256

也许像

find /sdcard/testfolder -type file -exec sha256sum {} > {}.sha256 \;

不幸的是,find -exec 不适用于该特定语法。

查看 find 命令示例的详细列表

https://sysaix.com/43-practical-examples-of-linux-find-command

我似乎确实是 -exec 命令parameter1 {}parameter2;是唯一的格式,但我可能是错的?

如果可能的话我想将其保留为单个命令

另一种途径可能是通过管道输入另一个命令,但是我找不到如何将管道中的文件名作为命令行参数引用,也许不可能?

find /sdcard/testfolder -type file | sort | sha256sum $filename? > $filename?.sha256

答案1

我会做什么:

find /sdcard/testfolder -not -name '*sha256' -type file -exec sh -c '
    sha256sum "$1" > "$1.sha256"
' sh {} \;

相关内容