我有一个相当大的文件夹(~10GB),其中包含整个目录树中的许多重复文件。其中许多文件重复了 10 次。重复的文件不会并排放置,而是位于不同的子目录中。
如何压缩文件夹以使其足够小?
我尝试在“最佳”模式下使用 Winrar,但它根本没有压缩它。(很奇怪)
zip\tar\cab\7z\ 任何其他压缩工具会做得更好吗?
我不介意让该工具工作几个小时 - 但不会更多。
我宁愿自己不以编程方式进行
我有一个相当大的文件夹(~10GB),其中包含整个目录树中的许多重复文件。其中许多文件重复了 10 次。重复的文件不会并排放置,而是位于不同的子目录中。
如何压缩文件夹以使其足够小?
我尝试在“最佳”模式下使用 Winrar,但它根本没有压缩它。(很奇怪)
zip\tar\cab\7z\ 任何其他压缩工具会做得更好吗?
我不介意让该工具工作几个小时 - 但不会更多。
我宁愿自己不以编程方式进行
在您的情况下,最佳选择是 7-zip。以下是选项:
7za a -r -t7z -m0=lzma2 -mx=9 -mfb=273 -md=29 -ms=8g -mmt=off -mmtf=off -mqs=on -bt -bb3 archife_file_name.7z /path/to/files
a
- 将文件添加到存档
-r
- 递归子目录
-t7z
- 设置存档类型(在您的情况下为 7z)
-m0=lzma2
- 将压缩方法设置为LZMA2。LZMA 是 7z 格式的默认和通用压缩方法。LZMA方法的主要特点:
-mx=9
- 设置压缩级别。x=0 表示复制模式(无压缩)。x=9 - 超
-mfb=273
- 设置 LZMA 的快速字节数。它可以在 5 到 273 的范围内。正常模式的默认值为 32,最大和超模式的默认值为 64。通常,较大的数字会提供更好的压缩比和较慢的压缩过程。
-md=29
- 为 LZMA 设置字典大小。您必须以字节、千字节或兆字节为单位指定大小。字典大小的最大值为 1536 MB,但 7-Zip 的 32 位版本允许指定最多 128 MB 的字典。LZMA 的默认值在正常模式下为 24 (16 MB),在最大模式下 (-mx=7) 下为 25 (32 MB),在超级模式下 (-mx=9) 下为 26 (64 MB)。如果您没有从集合 [b|k|m|g] 中指定任何符号,则字典大小将计算为 DictionarySize = 2^Size 字节。解压缩字典大小为 N 的 LZMA 方法压缩的文件,需要大约 N 字节的可用内存 (RAM)。
我使用md=29
是因为在我的服务器上只有 16Gb 可用 RAM。使用此设置 7-zip 在任何目录大小的归档中仅占用 5Gb。如果我使用更大的字典大小 - 系统将进行交换。
-ms=8g
- 启用或禁用固态模式。默认模式是s=on
. 在实体模式下,文件被组合在一起。通常,以固态模式压缩会提高压缩比。在您的情况下,这对于使实体块尽可能大非常重要。
实体块大小的限制通常会降低压缩比。固体 .7z 档案的更新可能会很慢,因为它可能需要重新压缩。
-mmt=off
-将多线程模式设置为 OFF。您需要将其关闭,因为我们需要在一个单独的块中由相同的 7-zip 线程处理相似或相同的文件。缺点是存档速度慢。无论您的系统有多少 CPU 或内核。
-mmtf=off
- 将过滤器的多线程模式设置为 OFF。
-myx=9
- 将文件分析级别设置为最大,分析所有文件(增量和可执行过滤器)。
-mqs=on
- 在实体档案中按类型对文件进行排序。将相同的文件存储在一起。
-bt
- 显示执行时间统计
-bb3
- 设置输出日志级别
7-zip 支持“WIM”文件格式,可以检测和“压缩”重复项。如果您使用的是 7-zip GUI,那么您只需选择“wim”文件格式。
仅当您使用命令行 7-zip 时,请参阅此答案。 https://serverfault.com/questions/483586/backup-files-with-many-duplicated-files
我建议我尝试过的 3 个选项(在 Windows 中):
我有 10 个文件夹,其中包含不同版本的网站(包含.php、.html、.js、.css、.jpeg、.sql等文件),总大小为 1Gb(每个文件夹平均 100Mb)。虽然标准 7zip 或 WinRar 压缩给了我一个大约 400/500Mb 的文件,但这些选项分别给了我一个 (1) 80Mb、(2) 100Mb 和 (3) 170Mb 的文件。
更新编辑:感谢评论中的@Griffin 建议,我尝试在 7zip WIM 文件上使用 7zip LZMA2 压缩(字典大小似乎没有区别)。遗憾的是,这与我几年前在测试中使用的备份文件不同,但我可以将 WIM 文件压缩为其大小的 70%。我会使用您的特定文件集尝试使用这 2 步方法,并将其与方法 1 进行比较。
新编辑:我的备份正在增长,现在有许多图像文件。该站点有 30 个版本,方法 1 的重量为 6Gb,而7zip LZMA2 文件中的 7zip WIM 文件的重量仅为 2Gb!
重复的文件是否具有相同的名称?它们的大小通常小于 64 MB 吗?然后您应该按文件名(不包括路径)排序,使用tar
将所有文件按该顺序归档到一个.tar
文件中,然后使用xz
压缩来制作.tar.xz
压缩存档。文件中相邻.tar
且小于xz
正在使用的压缩级别的窗口大小的重复文件应压缩到几乎没有。您可以在此xz
手册页中查看压缩级别的字典大小“DictSize” 。它们的范围从 256 KB 到 64 MB。
WinRAR默认单独压缩每个文件。因此,默认情况下压缩包含许多相似甚至相同文件的文件夹结构并没有真正的好处。
但也可以选择创建一个可靠的存档。打开WinRAR的帮助并在Contents选项卡上打开项目Archive types and parameters并单击Solid archives。此帮助页面解释了什么是可靠存档以及此存档文件格式具有哪些优点和缺点。
具有较大字典大小和最佳压缩的可靠存档可以使包含类似文件列表的存档文件非常小。例如,我有一个包含 327 个二进制文件的列表,文件大小从 22 KB 到 453 KB,总共 47 MB 不包括分区的集群大小。我可以将这 327 个相似但不相同的文件压缩成一个 RAR 存档,其字典大小为 4 MB,只有 193 KB。这当然是尺寸的显着减小。
在阅读有关solid archive 的帮助页面后,点击链接到有关rarfiles.lst的帮助页面。它描述了如何控制将文件放入可靠存档的顺序。该文件位于WinRAR的程序文件夹中,当然可以根据您的需要进行定制。
如果使用WinRAR的 GUI 版本,您还必须注意选项Files to store without compression。单击文件选项卡上的符号/命令添加后,可以找到此选项。有指定的文件类型,它们只是存储在存档中,没有任何压缩,如 *.png、*.jpg、*.zip、*.rar、... 这些文件通常已经包含压缩格式的数据,因此它不再次压缩它们很有意义。但是,如果文件夹结构中存在重复的 *.jpg 并且创建了可靠的存档,则从该选项中删除所有文件扩展名是有意义的。
使用WinRARRar.exe
控制台版本和使用 RAR5 存档文件格式的合适命令行是:
"%ProgramFiles%\WinRAR\Rar.exe a -@ -cfg- -ep1 -idq -m5 -ma5 -md128 -mt1 -r -s -tl -y -- "%UserProfile%\ArchiveFileName.rar" "%UserProfile%\FolderToArchive\"
本例中用到的开关在手册中有说明,手册是WinRAR程序文件目录下Rar.exe
的文本文件。也可以用于替换开关,如WinRAR页面上的帮助中所述字母开关列表通过最后一个菜单打开帮助单击第一个菜单项帮助主题并在第一个选项卡上展开内容列表项命令行模式和下一个子列表项Switches并单击第一项Alphabetic switch list。Rar.txt
WinRAR.exe
-idq
-ibck
顺便说一句:有像Total Commander、UltraFinder或UltraCompare等应用程序,它们支持通过各种用户可配置的标准搜索重复文件,例如查找具有相同名称和相同大小的文件,或者最安全,查找具有相同大小和相同大小的文件内容,并提供删除重复项的功能。
试试 www.exdupe.com 的 eXdupe,它使用重复数据删除,而且速度非常快,几乎受磁盘 I/O 限制