我怎么能得到md5sum内所有文件的压缩而不提取



是否有任何方法可以在不提取zip的情况下获得所有/任何人文件的md5sum ?

我可以使用unzip <.zip>

但我需要得到md5sum而不提取zip。

这可能不是你想要的,但它会让你更接近。您不会提取整个zip文件,而是提取一个文件并将其管道到md5sum以获得校验和。如果不读取文件的内容,md5sum将无法生成散列。

假设你有3个MD5文件:

b1946ac92492d2347c6235b4d2611184  a.txt
591785b794601e212b260e25925636fd  b.txt
6f5902ac237024bdd0c176cb93063dc4  c.txt

使用zip final.zip a.txt b.txt c.txt

将它们压缩到一个文件中当你列出文件时,你会看到有3个文件。

unzip -l final.zip
Archive:  final.zip
Length      Date    Time    Name
---------  ---------- -----   ----
6  2021-08-08 17:20   a.txt
6  2021-08-08 17:20   b.txt
12  2021-08-08 17:20   c.txt
---------                     -------
24                     3 files

要获得每个文件的MD5而不提取整个zip,您可以这样做:

unzip -p final.zip a.txt | md5sum
b1946ac92492d2347c6235b4d2611184  -
unzip -p final.zip b.txt | md5sum
591785b794601e212b260e25925636fd  -
unzip -p final.zip c.txt | md5sum
6f5902ac237024bdd0c176cb93063dc4  -
<标题>

选择您可以执行md5sum *.txt > checksums来获取所有文件的哈希值并将它们存储在校验和文件中。将其添加到zip中,这样您就可以知道每个文件在添加到压缩时的md5。

对于zip中的所有文件都可以使用;

File='final.zip' ; unzip -lqq $File | while read L ; do unzip -p $File ${L##*[[:space:]]} | md5sum | sed "s/-/${L##*[[:space:]]}/" ; done

走样;

b1946ac92492d2347c6235b4d2611184  a.txt
591785b794601e212b260e25925636fd  b.txt
6f5902ac237024bdd0c176cb93063dc4  c.txt

根据@MartinMann的回答,无论文件名是否包含空格或特殊字符,都能正确工作的版本:

ZIPFILE="final.zip"; unzip -Z1 "$ZIPFILE" | grep -v '/$' | while read L; do "$(unzip -p "$ZIPFILE" "$L" | md5sum | cut '-d ' -f1)  $L" ; done

给:

b1946ac92492d2347c6235b4d2611184  a.txt
591785b794601e212b260e25925636fd  b.txt
6f5902ac237024bdd0c176cb93063dc4  path/to/file with spaces.txt

相关内容

  • 没有找到相关文章

最新更新