如何在 busybox 上的 tar 存档内创建文件的 sha1 校验和而不使用太多磁盘空间

如何在 busybox 上的 tar 存档内创建文件的 sha1 校验和而不使用太多磁盘空间

我想以列表的形式获取简单 tar 存档内所有文件的 sha1 校验和。

这应该在只有最小的 tar 二进制文件可用的 busybox 机器上完成,请参阅http://linux.die.net/man/1/busybox获取可用命令。

无需使用磁盘空间来解压大 tar 文件。一些带有管道和即时计算 sha1 的东西,将输出定向到 /dev/null

这样就可以验证备份,而无需通过网络复制文件或提取文件,这两者都消耗资源。

这基本上是同一个问题如何在不使用太多磁盘空间的情况下创建 tar 存档内文件的 sha1 校验和它有一个很好的答案,但我后来才意识到 busybox tar 二进制文件是一个最小版本,没有该--to-command=sha1sum选项。

答案1

tar tf test.tar|while read file;do echo $file $(tar xOf test.tar $file|sha1sum);done 

答案2

以下是该解决方案的一些主要问题:

tar tf test.tar|while read file;do echo $file $(tar xOf test.tar $file|sha1sum);done

1-busybox 的 tar 无法显示带有换行符的不同文件名。

2-从 shell 中“读取”不能正确处理反斜杠。 (“\”字符被吃掉或“\n”被换行符替换)

3-不带双引号的 Shell 变量会吃掉重复的空格字符。

我无法解决问题1。

无论如何,我可以修复2和3。

创建此 shell 脚本:“tarsha1.sh”(不要忘记“chmod 755 tarsha1.sh”)

#!/bin/sh
tarname="$1"
shift
for filename in "$@"
do tar xOf "$tarname" "$filename" | sha1sum | head -c -3
   printf '%s\n' "$filename"
done

然后使用这个命令:

tar tf test.tar | tr '\n' '\0' | xargs -0 -r ./tarsha1.sh test.tar

这样,您应该能够处理除换行符(“\n”)之外的任何字符的文件名。

注意:xargs 的“-0”选项必须在 busybox 编译选项中激活。

相关内容