如何将大文件夹压缩为限制为20Mb的小文件?


10

我正在寻找一种将大文件夹压缩成许多20Mb文件的方法。我不希望将zip文件拆分成较小的文件。相反,我想将一些子文件/文件夹分组,当压缩时为20Mb。

如果您知道该怎么做,请帮助!

更新资料

我需要单独使用较小的压缩文件,而这些文件可以单独解压缩。

我的意图是使用virustotal.com扫描一个大文件夹。


有关您使用的操作系统的任何详细信息?
皮托

@Pitto我使用Windows-7
Nam G VU

Answers:


10

在Winzip中:通过启动Winzip并添加或拖放到Winzip中或右键单击文件并Winzip'添加到zip ...',将文件添加到zip中。

然后在winzip中:

动作-在“零件尺寸”的底部进行拆分,选择“其他尺寸”,然后输入20并选择mb

做完了!


4
保持自由状态也非常适用于7zip :)
Pitto

3
这将分割zip文件,我们不能单独使用分割的部分。
Nam G VU

天哪,现在我更好地了解了您要寻找的是什么...我只是无法找到解决您问题的任何方法,那么:(那使用免费且出色的Malwarebytes Antimalware在本地扫描文件呢?
Pitto

6

您所建议的本质上是背包问题的一种变体,并增加了扭曲,由于文件压缩,您不必从开始就知道每个项目将占用20MB的“背包”中的多少。

当然,简单的解决方案是简单地独立压缩每个文件,但这无法减少文件数量,因此我怀疑这不是一个令人满意的解决方案。

如果遇到这个问题,我想我会先将每个文件分别压缩到一个临时位置(或在内存中,而不将它们写入磁盘),这样我就可以为每个文件获得近似的压缩大小。有了这些信息,便有可能决定采用任何标准的背包问题标准方法将哪些文件分组在一起,并创建实际的zip文件。

假设您可以使用一种脚本语言并且知道如何使用它,那么我希望这种方法可以很简单地实现自动化。如果您要处理的文件不多,那么手动进行将非常繁琐...


1
不能以“无压缩”压缩吗?查看op的“更新”,似乎文件格式比压缩更重要。
昂贵的

1
嘿...好点。我没有考虑过使用zip作为不压缩的简单存档。
Dave Sherohman 2011年

@DaveSherohman那么我们该怎么办呢?
Nam G VU 2012年

5

让zip为您进行拆分比自动尝试拆分要容易得多。如果您的目标是20MB的zip文件,则必须先估算每个文件的压缩大小,然后再将其添加到存档中。您是否有理由不想让zip为您拆分?使用gnu zip的方法如下:

zip -s 20m -r myzip.zip mydir

这将创建20MB的压缩文件,并在文件名中增加索引号。


4
根据OP对另一个答案的评论,听起来他不希望zip自动拆分,因为那样您会得到一个压缩文件,该压缩文件要求所有文件正常运行,但他希望每一个文件都是完整的,可用的,独立的压缩文件其他的。
Dave Sherohman 2011年

4

在Linux上,有一个名为zipsplit的程序可以做到这一点。它是标准zip包的一部分。

可以这样运行:

zipsplit bigfile.zip -n 20000000

将bigfile.zip拆分为最大20MB的部分。并请注意,单个包含的文件不会被拆分。因此,每个部分都可以单独解压缩。这也意味着,如果单个文件无法容纳最大零件尺寸,则将无法拆分。

更新: 似乎在info-zip.org上也有Windows的二进制文件,特别是Win 64的ftp://ftp.info-zip.org/pub/infozip/win32/zip300xn-x64.zip


3

恐怕前景并不轻松。

我最近编写了一个脚本,用于将文件收集到不大于4.3GB的子目录中,以便于在DVD上轻松存储,但是这些文件都未经压缩。

通过压缩来实现-现在是挑战。您无法预测压缩的文件大小-您所能做的就是保持文件大小按降序顺序添加到zip文件中,直到文件大小超过20MB,然后删除最后一个文件并替换为较小的文件,直到文件大小降至20MB以下。如果您用尽了所有文件,但文件大小仍大于20MB,则只需删除最后一个文件并移至下一个zip文件即可。

相当棘手的脚本编写和相当缓慢,痛苦的过程。


这是我的想法。为什么不简单地将文件/文件夹分组为<= 20Mb的未压缩组,然后将其压缩?我们不需要.zip结果文件每个精确地为20Mb。
Nam G VU

可能-不确定如何在Windows中使用脚本进行处理-我之前在Linux上使用过Perl。
Majenko 2011年

2

我知道这是一个旧线程,但是我只是使用7-zip做到了。

您需要使用“拆分为音量”选项:

在此处输入图片说明


凉。稍后我会再与您联系。
Nam G VU

1
在这种特定情况下不起作用,因为较小的压缩文件无法单独解压缩。他们必须保持在一起。
2016年

2

Dave似乎提供了与OP要求最接近的可编程解决方案。我发现,如果采取以下假设,这也可以手动完成(这不是一个纯粹的技术问题,它更是一个组织问题,而不是技术问题):

  1. 由于OP要求每个压缩文件都应能够独立提取其所有内容,因此压缩后超过20 MB的文件必须以下列方式之一处理:
    • 它们不被考虑,因此必须分开;
    • 如建议的其他答案(winzip7-zip)所示,它们需要分成20MB的卷,并且生成的文件不能单独使用(打破了第一个假设)。
  2. 压缩后的文件不一定需要恰好有20MB。
  3. 如果拥有几个大约20MB大小的zip文件更为重要,则可以在不压缩的情况下进行zip压缩。

通过将此方法与7-zip(Windows的界面和终端)结合使用,我将压缩保留在新生成的zip文件中。

首先将所有文件压缩到一个空文件夹中的单个zip文件中(使用所需的压缩方法),例如ALL.zip,然后将其打开:

  1. 通过单击大小或压缩大小(压缩)列来排序文件和文件夹的列表;
  2. 从最小的尺寸开始,然后选择要分组为zip的文件/文件夹;
  3. 按下Test按钮以确认其集体大小(这将考虑其压缩程度): 测试功能
  4. ExtractCopy按钮,同时增加了提取路径的末尾的新文件夹的名称(例如:plu_8MB
  5. ALL.zipzip内,删除刚刚提取的这些文件(避免错误地重新提取),然后导航到下一个文件夹或文件子集;
  6. 重复一个如下:
    • 如果您打算创建一个独立的zip文件,则执行步骤1至5;
    • 步骤1至3并重复使用相同的文件夹名称(步骤4),直到它们的总大小约为20MB;
  7. 将的所有内容提取ALL.zip到独立的文件夹后,请删除该zip文件,然后在该文件夹中打开终端
  8. 类型:

    for /F %i in ('dir /b') do "C:\Program Files\7-zip\7z.exe" a -tzip %i.zip %i
    

    ENTER,这将为您刚刚提取的每个文件夹生成一个zip文件。


对于重新压缩中的不同参数,请参见7zip语法文档
CPHPython
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.