我有一个非常庞大的文件夹(约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)(正常模式),25(32 MB)(最大模式)(-mx = 7)和26(64 MB)(超级模式)(-mx = 9)。如果您没有从符号集合[b | k | m | g]中指定任何符号,则字典大小将被计算为DictionarySize = 2 ^ Size bytes。要解压缩用LZMA方法压缩的文件,需要有约N个字节的内存(RAM)可用,其中N为字典大小。
我使用md=29
,因为我的服务器只有16GB的RAM可用。使用此设置,7-zip仅占用5GB来对任何目录大小进行归档。如果我使用更大的字典大小,则系统会转换到交换区。
-ms=8g
- 启用或禁用固实模式。默认模式是s=on
。在固实模式下,文件被分组在一起。通常,在固实模式下进行压缩可以提高压缩比。在您的情况下,将固体块大小尽可能大非常重要。
所固定块大小的限制通常会降低压缩比。更新固定的.7z档案可能会很慢,因为它可能需要进行一些重新压缩。
-mmt=off
- 将多线程模式设置为关闭。您需要关闭它,因为我们需要由同一个7-zip线程处理相似或相同的文件在一个soled块中。缺点是归档速度慢。无论您的系统有多少个CPU或核心都不重要。
-mmtf=off
- 将用于过
7-zip支持“WIM”文件格式,该格式将检测和“压缩”重复项。如果您使用的是7-zip GUI,则只需选择“wim”文件格式。
仅当您使用命令行7-zip时,请参见此答案。 https://serverfault.com/questions/483586/backup-files-with-many-duplicated-files
重复的文件是否具有相同的名称?它们通常小于64 MB吗?那么您应该按文件名(不包括路径)排序,使用tar
将所有文件按顺序归档为.tar
文件,然后使用xz
压缩成一个.tar.xz
压缩存档。在.tar
文件中相邻并且小于所使用的xz
压缩级别的窗口大小的重复文件应该可以压缩到几乎为零。您可以查看此xz
手册页面中用于压缩级别的字典大小,其范围从256 KB到64 MB。
tar
能够处理硬链接,因此在执行tar
之前,我会查找重复文件并创建硬链接。这是我的脚本:for path in path1 path2 path3 ...; do find $path -type f; done | xargs -d'\n' sha1sum | sort | while read -r sha path; do test "$sha" == "$prev_sha" && ln -f $prev_path $path; prev_sha=$sha; prev_path=$path; done
。 - fishautumn但是,还有创建实体归档的选项。打开WinRAR帮助并在内容选项卡中打开归档类型和参数项目,然后单击实体归档。此帮助页面将解释实体归档是什么以及此归档文件格式具有哪些优点和缺点。
具有较大字典大小和最佳压缩的实体归档可以使包含一系列相似文件的归档文件非常小。例如,我有一个包含327个二进制文件的列表,文件大小从22 KB到453 KB,总共有47 MB,不包括分区的簇大小。我可以将这些327个相似但不完全相同的文件压缩成一个RAR归档文件,字典大小为4 MB,仅为193 KB。当然,这是一个显著的大小减少。
阅读关于固体存档的帮助页面后,点击链接查看有关 rarfiles.lst 的帮助页面。它描述了如何控制文件放入固体存档的顺序。该文件位于 WinRAR 的程序文件夹中,当然可以按照您的需求进行定制。Rar.exe
控制台版本和 RAR5 存档文件格式的适当命令行应为:"%ProgramFiles%\WinRAR\Rar.exe a -@ -cfg- -ep1 -idq -m5 -ma5 -md128 -mt1 -r -s -tl -y -- "%UserProfile%\ArchiveFileName.rar" "%UserProfile%\FolderToArchive\"
Rar.txt
中有解释。也可以使用WinRAR.exe
,将开关-idq
替换为-ibck
,如WinRAR上的帮助所述,在打开最后一个菜单帮助并单击第一项菜单帮助主题并展开第一个选项卡内容中的列表项命令行模式和接下来的子列表项开关,并单击第一个项目字母顺序开关列表。
顺便说一句:还有像Total Commander、UltraFinder或UltraCompare等应用程序,支持通过各种用户可配置的标准搜索重复文件,例如查找具有相同名称和相同大小的文件,或者最安全的是查找具有相同大小和相同内容的文件,并提供删除重复项的功能。
请尝试来自 www.exdupe.com 的 eXdupe,它使用去重技术,并且速度非常快,几乎可以达到磁盘 I/O 的极限。
7z a -twim name.wim folder/
创建 .wim 文件,然后再用-mx=9 -m0=lzma2
压缩它所得到的文件要小。 - Matthew K.