如何在7-zip中执行“无需压缩即可存储的文件”?


25

有没有办法像WinRAR那样有选择地防止某些文件类型在7-zip中压缩?

我正在尝试压缩一个巨大的文件夹(许多GB),并且我不希望重新压缩已经压缩的文件(例如ZIP文件)-它们应该不压缩地存储。


您是否有特定原因(要节省一点处理时间,无需捆绑7z二进制文件或重新实现LZMA等来读取它们)等原因?一般来说,我遇到过的大多数压缩工具通常都足够聪明,可以自动存储未压缩的内容(如果它们发现文件对尝试进一步压缩的响应不佳)。
ssokolow

@ssokolow:已有4年了,我想我从未回答过您的问题,但是还有其他原因,例如,最大限度地减少了腐败造成的损失,也使灾难中的数据恢复更加容易。
Mehrdad 2015年

Answers:


19

是的,对于同一7-Zip存档中的不同文件,可能有不同的压缩方法。

使用带有-m参数的命令行版本的7-Zip 将方法指定为Copy,这意味着不进行压缩。

范例:

7za a -m0=Copy tmp7.7z *.txt

有关更多信息,请参见-m(设置压缩方法)开关


上面的命令将不会压缩txt文件,而只会将txt文件添加到现有存档中。在运行上述命令之前,应使用非txt文件创建一个存档文件。如果有n种不同类型的文件,则不是那么容易。
Praveen Sripati 2011年

如果-m0=Copy不起作用,请尝试-mx=0
Bora M. Alper

15

假设您有zip文件,并且文件夹中有未压缩的txt文件。

第一步是使用以下命令创建压缩txt文件的存档。

您可以使用-m设置压缩级别,这还取决于您使用的压缩方法

让我们假设这里仅是默认压缩

7z a compressed.7z *.txt -r 

您现在将被压缩。7z。

第二个步骤将是已经压缩的文件复制到该存档或创建一个新的存档

7z u compressed.7z -u!update.7z -mx0 *.zip 

有更新命令的进一步阐述这里

如果您有使用图形界面的自由,则可以通过以下方式完成更新

在此处输入图片说明


有点麻烦,但是我想那行得通,谢谢。
Mehrdad

1

我创建了一个PowerShell脚本,该脚本将通过存储已经压缩的文件类型(例如.zip文件)来快速压缩目录,而无需尝试重​​新压缩它们。它使用7zip的命令行界面,并使用文件扩展名来决定是压缩还是简单地存储任何给定的文件。

您可以在此处找到脚本:https : //gist.github.com/ivanatpr/5dea086172eab573ba71


0

从技术上讲,压缩文件不会进一步压缩,关于熵极限之类的东西,我忘记了细节,但是您获得的最多信息不到我所看到的2%。

大多数好的压缩器都会检查压缩并仅存储不可压缩的文件,因为压缩会增加开销并增加大小。

当然,首先要查看文件的工作和时间。

正如在其他答案中所讨论的那样,对文件集执行多次传递可能将是最佳解决方案,并且易于编写脚本。

创建7z归档文件,并一次性添加所有内容,但添加压缩文件,然后将预压缩文件作为未压缩数据附加。(我这样做是因为可压缩的内容将位于存档的开头,而所有不可压缩的则位于末尾。由于它是连续的,它将更快地从驱动器中流出)

(太多使用“压缩...”!)


1
万一它对任何人都有帮助,这就是“关于熵极限之类的东西”的要旨。可以将熵视为不可预测性的量度。压缩背后的想法是,如果您可以预测位的模式,则无需存储整个内容……仅是有关如何预测它(代码字)的更紧凑的说明。当下一个代码字可能是任何东西时,就可以达到理论上的最大熵。当第二遍在第一遍的输出中确定剩余可预测性时,就会从压缩数据中挤出更多压缩。
ssokolow 2015年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.