我正在寻找一种将大文件夹压缩成许多20Mb文件的方法。我不希望将zip文件拆分成较小的文件。相反,我想将一些子文件/文件夹分组,当压缩时为20Mb。
如果您知道该怎么做,请帮助!
更新资料
我需要单独使用较小的压缩文件,而这些文件可以单独解压缩。
我的意图是使用virustotal.com扫描一个大文件夹。
我正在寻找一种将大文件夹压缩成许多20Mb文件的方法。我不希望将zip文件拆分成较小的文件。相反,我想将一些子文件/文件夹分组,当压缩时为20Mb。
如果您知道该怎么做,请帮助!
更新资料
我需要单独使用较小的压缩文件,而这些文件可以单独解压缩。
我的意图是使用virustotal.com扫描一个大文件夹。
Answers:
您所建议的本质上是背包问题的一种变体,并增加了扭曲,由于文件压缩,您不必从开始就知道每个项目将占用20MB的“背包”中的多少。
当然,简单的解决方案是简单地独立压缩每个文件,但这无法减少文件数量,因此我怀疑这不是一个令人满意的解决方案。
如果遇到这个问题,我想我会先将每个文件分别压缩到一个临时位置(或在内存中,而不将它们写入磁盘),这样我就可以为每个文件获得近似的压缩大小。有了这些信息,便有可能决定采用任何标准的背包问题标准方法将哪些文件分组在一起,并创建实际的zip文件。
假设您可以使用一种脚本语言并且知道如何使用它,那么我希望这种方法可以很简单地实现自动化。如果您要处理的文件不多,那么手动进行将非常繁琐...
让zip为您进行拆分比自动尝试拆分要容易得多。如果您的目标是20MB的zip文件,则必须先估算每个文件的压缩大小,然后再将其添加到存档中。您是否有理由不想让zip为您拆分?使用gnu zip的方法如下:
zip -s 20m -r myzip.zip mydir
这将创建20MB的压缩文件,并在文件名中增加索引号。
在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。
恐怕前景并不轻松。
我最近编写了一个脚本,用于将文件收集到不大于4.3GB的子目录中,以便于在DVD上轻松存储,但是这些文件都未经压缩。
通过压缩来实现-现在是挑战。您无法预测压缩后的文件大小-您所能做的就是保持文件大小按降序顺序添加到zip文件中,直到文件大小超过20MB,然后删除最后一个文件并替换为较小的文件,直到文件大小降至20MB以下。如果您用尽了所有文件,但文件大小仍大于20MB,则只需删除最后一个文件并移至下一个zip文件即可。
相当棘手的脚本编写和相当缓慢,痛苦的过程。
Dave似乎提供了与OP要求最接近的可编程解决方案。我发现,如果采取以下假设,这也可以手动完成(这不是一个纯粹的技术问题,它更是一个组织问题,而不是技术问题):
通过将此方法与7-zip(Windows的界面和终端)结合使用,我将压缩保留在新生成的zip文件中。
首先将所有文件压缩到一个空文件夹中的单个zip文件中(使用所需的压缩方法),例如ALL.zip
,然后将其打开:
Test
按钮以确认其集体大小(这将考虑其压缩程度):
Extract
或Copy
按钮,同时增加了提取路径的末尾的新文件夹的名称(例如:plu_8MB
)ALL.zip
zip内,删除刚刚提取的这些文件(避免错误地重新提取),然后导航到下一个文件夹或文件子集;ALL.zip
到独立的文件夹后,请删除该zip文件,然后在该文件夹中打开终端;类型:
for /F %i in ('dir /b') do "C:\Program Files\7-zip\7z.exe" a -tzip %i.zip %i
按ENTER,这将为您刚刚提取的每个文件夹生成一个zip文件。