我看到很多 FOSS 项目都有“.sha256”文件。它们看起来像这样:
dsdfdfdsffdfsdfdsfdsfdsfdsfdsfds23r2ewrefdefdsfdsgfdsgffgfkgdfgg *meow.exe
Asdfdfdsffdfsdfdsfdsfdsfdsfdsfds23r2ewrefdefdsfdsgfdsgffgfkgdfg3 cool_stuff.exe
dsdfdfdsfDdfsdfdsfdsfdsfdsfdsfds23r2ewrefdefdsfdsgfdsgffg3kgdfgg even_more_stuff.exe
我目前用以下方法得到这些:
#^([A-Za-z0-9]{64})\s+(\S+)$#um
这将匹配dsdfdfdsffdfsdfdsfdsfdsfdsfdsfds23r2ewrefdefdsfdsgfdsgffgfkgdfgg
和*meow.exe
等。以星号开头的文件名(我无数次试图查找这个却不知道这意味着什么)会被剥离其开头的*
。
除此之外还有什么?如果文件名中有空格而不是下划线,会发生什么?那么我的正则表达式就会失效。它们可以加引号吗?如果可以,是使用 Linux(单引号)还是 Windows 样式(双引号)引用?
这种看似简单的文件格式实际上有无数与之相关的问题,但我没有看到它在任何地方被定义。到目前为止,我还没有遇到过使用空格或任何类型的引号的文件名。但它们确实使用星号,这显然也可以出现在结尾文件名...
应该如何解析这种疯狂,才不会有一天爆发?
答案1
文件.sha256
是程序生成的文本文件sha256sum
。文件的目的.sha256
是使人们能够使用sha256sum
程序检查文件的完整性。其内容不应由人类手动解释。sha256sum
的手册页指的是https://www.gnu.org/software/coreutils/sha256sum这又指的是https://www.gnu.org/software/coreutils/manual/html_node/md5sum-invocation.html:
对于每个文件,
md5sum
默认输出 MD5 校验和、空格、表示二进制或文本输入模式的标志以及文件名。二进制模式用 表示*
,文本模式用(空格)表示。二进制模式在重要的系统中是默认模式,否则默认为文本模式。如果没有
--zero
,则如果文件包含反斜杠或换行符,则行以反斜杠开头,并且文件名中的每个有问题的字符都用反斜杠转义,即使存在任意文件名,输出也不会产生歧义。如果省略文件或将其指定为-
,则读取标准输入。
并进一步:
‘-c’
--check’
从每个文件(如果未指定文件,则从 stdin 读取)读取文件名和校验和信息(不是数据),并报告校验和是否与指定文件的内容匹配。此模式的输入
md5sum
通常是先前生成校验和的运行的输出md5sum
。支持三种输入格式。上面描述的默认输出格式、输出格式或 BSD 反转模式格式,该格式类似于默认模式,但不使用字符来区分二进制和文本模式。不支持启用的--tag
输出。--zero
--check