示例我有这些文件
/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 {} \;