我经常需要备份一组文件,其中有许多子文件夹,其中包含几个大的相同文件。
是否存在一种压缩方案(.zip、.7z 等)可以自动检测这种情况并且不会多次存储相同的文件?
答案1
以下是我想到的一个例子:
[jay test]$ tree .
.
`-- compressme
|-- a
| `-- largefile (10MB)
`-- b
`-- largefile (10MB, identical to ../a/largefile)
3 directories, 2 files
[jay test]$ du -sh compressme/
21M compressme/
[jay test]$ tar -cf compressme.tar compressme/
[jay test]$ du -sh compressme.tar
21M compressme.tar
[jay test]$ lzma -9 compressme.tar
[jay test]$ du -sh compressme.tar.lzma
11M compressme.tar.lzma
答案2
我也刚刚经历过这个。
如果您将文件压缩到 Tar Ball 中,如果 Tar Ball 中重复文件相隔太远,7z 的 LZMA 压缩可能会或可能无法识别这些重复文件(这是词典大小和其他一些因素的函数)。
7z 具有收集重复项的 WIM 格式,因此您可以在其中使用常规 LZMA 压缩。Windows 命令行示例:
7z a -twim "Example.wim" *
7z a -t7z -m0=lzma -mx=9 -mfb=64 -md=32m -ms=on -mhc=on "Example.7z" "Example.wim"
del "Example.wim"
效果很好,试一试吧。
答案3
我建议使用我已经尝试过的 3 个选项(在 Windows 中):
- 7zip LZMA2 压缩,字典大小为 1536Mb
- WinRar“固体”文件
- 7zip WIM 文件
我有 10 个文件夹,里面有不同版本的网站(包括以下文件:.php,.html,.js,.css,.jpeg,.sql等),总大小为 1Gb(每个文件夹平均 100Mb)。虽然标准 7zip 或 WinRar 压缩为我提供了一个大约 400/500Mb 的文件,但这些选项为我提供了一个 (1)80Mb、(2)100Mb 和(3)170Mb。
答案4
您可以使用 FastPack 来实现此目的:https://github.com/QuanosSolutions/FastPack