如何处理 .tar.md5 文件
How to handle .tar.md5 files
我想知道如何创建/提取/验证 .tar.md5
文件。这些文件在将图像闪烁到 android 设备时使用,例如参见 [=16=]。
据我所知,校验和是这样附加到文件中的:
cp file.tar file.tar.md5
md5sum file.tar >> file.tar.md5
首先我想知道如何提取文件。我可以简单地在 file.tar.md5
上使用 tar -xf
吗?
如何验证文件的完整性?我想从文件中删除最后一个字节(包含校验和)以取回原始文件。我想您必须使用正则表达式来匹配 checksum file.tar
?类似这样的东西已经在某处实施了吗?
首先,tar -xf 应该可以工作,因为 tar 在匹配其打包算法时会继续。如果文件停止匹配,tar 也会停止匹配。
如果您删除“.md5”,大多数存档管理器(如 7-zip 或 winrar)也会打开它。
他们可能会打印与文件末尾不匹配的错误,请忽略它。
关于验证文件:
打印出存储的md5sum: tail -z -n 1 [这里是文件名].tar.md5
计算文件tar部分的md5sum: head -z -n -1 [这里是文件名].tar.md5 | md5sum
Ubuntu 19.10 对我有用的是:
- 从 sammobile com 下载单个文件 4 GiB zip
- 解压到几个*.tar.md5
- 运行 下面的命令行
.
for F in *.tar.md5; do echo -n "$F " &&
EXP=($(tail --lines=1 "$F")) &&
ACT=($(head --lines=-1 "$F" | md5sum)) &&
if [ ${EXP[0]} = ${ACT[0]} ]; then echo -n "md5ok " &&
tar --extract --file "$F" && echo "done"
else echo "FAIL"; fi; done &&
unlz4 --multiple --verbose *.lz4
AP_G965U1UEU3ARL1_CL14745140_QB21029084_REV01_user_low_ship_MULTI_CERT_meta.tar.md5 md5ok done
BL_G965U1UEU3ARL1_CL14745140_QB21029084_REV01_user_low_ship_MULTI_CERT.tar.md5 md5ok done
CP_G965U1UEU3ARL1_CP11407818_CL14745140_QB21029084_REV01_user_low_ship_MULTI_CERT.tar.md5 md5ok done
CSC_OMC_OYM_G965U1OYM3ARL1_CL14745140_QB21029084_REV01_user_low_ship_MULTI_CERT.tar.md5 md5ok done
HOME_CSC_OMC_OYM_G965U1OYM3ARL1_CL14745140_QB21029084_REV01_user_low_ship_MULTI_CERT.tar.md5 md5ok done
…
但是我们都应该尽量远离bash
我想知道如何创建/提取/验证 .tar.md5
文件。这些文件在将图像闪烁到 android 设备时使用,例如参见 [=16=]。
据我所知,校验和是这样附加到文件中的:
cp file.tar file.tar.md5
md5sum file.tar >> file.tar.md5
首先我想知道如何提取文件。我可以简单地在 file.tar.md5
上使用 tar -xf
吗?
如何验证文件的完整性?我想从文件中删除最后一个字节(包含校验和)以取回原始文件。我想您必须使用正则表达式来匹配 checksum file.tar
?类似这样的东西已经在某处实施了吗?
首先,tar -xf 应该可以工作,因为 tar 在匹配其打包算法时会继续。如果文件停止匹配,tar 也会停止匹配。 如果您删除“.md5”,大多数存档管理器(如 7-zip 或 winrar)也会打开它。 他们可能会打印与文件末尾不匹配的错误,请忽略它。
关于验证文件:
打印出存储的md5sum: tail -z -n 1 [这里是文件名].tar.md5
计算文件tar部分的md5sum: head -z -n -1 [这里是文件名].tar.md5 | md5sum
Ubuntu 19.10 对我有用的是:
- 从 sammobile com 下载单个文件 4 GiB zip
- 解压到几个*.tar.md5
- 运行 下面的命令行
.
for F in *.tar.md5; do echo -n "$F " &&
EXP=($(tail --lines=1 "$F")) &&
ACT=($(head --lines=-1 "$F" | md5sum)) &&
if [ ${EXP[0]} = ${ACT[0]} ]; then echo -n "md5ok " &&
tar --extract --file "$F" && echo "done"
else echo "FAIL"; fi; done &&
unlz4 --multiple --verbose *.lz4
AP_G965U1UEU3ARL1_CL14745140_QB21029084_REV01_user_low_ship_MULTI_CERT_meta.tar.md5 md5ok done
BL_G965U1UEU3ARL1_CL14745140_QB21029084_REV01_user_low_ship_MULTI_CERT.tar.md5 md5ok done
CP_G965U1UEU3ARL1_CP11407818_CL14745140_QB21029084_REV01_user_low_ship_MULTI_CERT.tar.md5 md5ok done
CSC_OMC_OYM_G965U1OYM3ARL1_CL14745140_QB21029084_REV01_user_low_ship_MULTI_CERT.tar.md5 md5ok done
HOME_CSC_OMC_OYM_G965U1OYM3ARL1_CL14745140_QB21029084_REV01_user_low_ship_MULTI_CERT.tar.md5 md5ok done
…
但是我们都应该尽量远离bash