使用命令md5sum
, sha1sum
,sha256sum
我可以获取每行包含哈希值和路径的文本文件,并在单个命令中验证整个文件列表,例如sha1sum -c mydir.txt
. (所述文本文件很容易通过循环find
或其他方式生成。)
有没有办法对 CRC/CRC32 哈希值列表执行相同操作?
此类哈希值通常存储在类似 zip 的档案中,例如 ZIP 本身或 7z。例如:
$ unzip -v archive.zip
Archive: archive.zip
Length Method Size Cmpr Date Time CRC-32 Name
-------- ------ ------- ---- ---------- ----- -------- ----
8617812 Stored 8617812 0% 12-03-2015 15:20 13fda20b 0001.tif
或者:
$ 7z l -slt archive.7z
Path = filename
Size = 8548096
Packed Size =
Modified = 2015-12-03 14:20:20
Attributes = A_ -rw-r--r--
CRC = B2F761E3
Encrypted = -
Method = LZMA2:24
Block = 0
答案1
尝试 RHash
尝试RHash。
例子
$ echo -n a > a.txt; echo -n b > b.txt; echo -n c > c.txt
✔
$ rhash --crc32 --simple *.txt > checksums.crc32
✔
$ cat checksums.crc32
e8b7be43 a.txt
71beeff9 b.txt
06b9df6f c.txt
✔
$ rhash --crc32 --check checksums.crc32
--( Verifying checksums.crc32 )-------------------------------------------------
a.txt OK
b.txt OK
c.txt OK
--------------------------------------------------------------------------------
Everything OK
✔
注1:--简单格式
如果您不使用--simple
格式化选项,那么 rhash 将默认为不同的格式。这可能不是您想要的:
$ rhash --crc32 *.txt
; Generated by RHash v1.3.7 on 2020-06-03 at 16:02.51
; Written by Kravchenko Aleksey (Akademgorodok) - http://rhash.sf.net/
;
; 1 15:58.36 2020-06-03 a.txt
; 1 15:58.36 2020-06-03 b.txt
; 1 15:58.36 2020-06-03 c.txt
a.txt E8B7BE43
b.txt 71BEEFF9
c.txt 06B9DF6F
✔
注2:--all选项
如果你想疯狂:试试--all
选项一次获取所有支持的哈希值。
答案2
该crc32
实用程序没有类似-c
的选项sha1sum
。不过,验证可以在脚本中完成。
假设我们已将 crc32 值存储在文件中,格式与 sha1sum 打印值相同:
a8374911 *file1.ext
32c5188e *file2
6592d5e5 *bflmpsvz
可以通过 bash 脚本检查 crc32:
while read line
do
name=${line#* \*}
crc32=`crc32 "$name"`
echo -n "$name: "
if [ "${line% \**}" == "$crc32" ]
then
echo OK
else
echo FAILED
fi
done < file_with_crc32
该脚本提供与 相同的输出sha1sum -c
。它迭代文件中的所有行file_with_crc32
以及每一行
- 从读取行检索文件名
- 计算 CRC32
- 将计算值与文件中的值进行比较
- 打印结果