【问题标题】:Can `7z` compress only the updated section of the file instead of compressing complete updated file?`7z` 可以只压缩文件的更新部分而不是压缩完整的更新文件吗?
【发布时间】:2018-05-20 10:50:17
【问题描述】:

首先,我创建了一个 1GB 的文件并传输到/target 文件夹,然后我使用7z a targer.7z target 压缩了该文件。

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

[Q] 如何强制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 文件合并,而是再次重新压缩了完整的文件.

【问题讨论】:

  • 您需要使用面向块的压缩算法,但您所寻找的实现几乎没有。
  • 是的,我找不到任何开源实现。我想,我应该坚持使用7z。 @Ignacio Vazquez-Abrams

标签: compression 7zip


【解决方案1】:

7z 不是为此而设计的。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-02-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-22
    相关资源
    最近更新 更多