`7z`只能压缩文件的更新部分而不是压缩完整的更新文件吗?

时间:2018-05-20 10:50:18

标签: compression 7zip

首先,我创建了1GB文件并转移到/target文件夹,然后使用7z a targer.7z target压缩文件。

稍后我将hello字符串附加到1GB文件的尾部。当我使用更新选项/target重新压缩7z u target.7z target文件夹时;我观察到更新的文件再次被压缩,而不是仅压缩其更新的部分。

[问] 我如何强制7z仅压缩文件的更新部分而不是压缩完整的更新文件?是否有任何替代压缩方法来实现这一目标?

示例:

$ mkdir target
$ fallocate -l 1G target/temp_1GB_file
$ time 7z a target.7z target
7-Zip [64] 9.20  Copyright (c) 1999-2010 Igor Pavlov  2010-11-18
p7zip Version 9.20 (locale=en_US.UTF-8,Utf16=on,HugeFiles=on,8 CPUs)    
Scanning    
Updating archive target.7z    
Compressing  target/temp_1GB_file
Compressing  target/target.7z    
Everything is Ok

real    0m23.054s
user    0m30.316s
sys 0m1.047s

$ echo 'hello' >> target/temp_1GB_file
$ time 7z u target.7z target # Here complete file has been compressed all over again.
7-Zip [64] 9.20  Copyright (c) 1999-2010 Igor Pavlov  2010-11-18
p7zip Version 9.20 (locale=en_US.UTF-8,Utf16=on,HugeFiles=on,8 CPUs)    
Scanning   
Updating archive target.7z    
Compressing  target/temp_1GB_file    
Everything is Ok    

real    0m23.861s
user    0m30.781s
sys 0m1.192s

在这里,正如您所看到的,我使用“hello”字符串附加了文件,而不是压缩“hello's找到的文件块并与已经压缩的1GB文件合并,而是完整文件再次重新压缩。

1 个答案:

答案 0 :(得分:1)

7z不是为此设计的。

您可以查看gzlog.hgzlog.c代码,了解如何有效地将短消息附加到压缩文件中。