Мне часто нужно делать резервную копию группы файлов, в которых много подпапок, содержащих несколько больших идентичных файлов.
Существует ли схема сжатия (.zip, .7z и т. Д.), Которая может автоматически определять это и не сохранять идентичные файлы более одного раза?
Я тоже только что прошел через это.
Если вы сжимаете свои файлы в Tar Ball, сжатие 7z LZMA может или не может распознать дубликаты, если они слишком далеко разделены в Tar Ball (это функция размера словаря и некоторых других вещей).
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 варианта, которые пробовал (в Windows):
У меня было 10 папок с разными версиями веб-сайта (с такими файлами, как .php, .html, .js, .css, .jpeg, .sqlи т. д.) общим размером 1Гб (В среднем 100 МБ на папку). В то время как стандартное сжатие 7zip или WinRar дало мне файл размером около 400/500 МБ, эти параметры дали мне файл размером (1) 80Мб, (2) 100 Мб и (3) 170 Мб соответственно.
Да, это возможно: https://superuser.com/questions/479074/why-doesnt-gzip-compression-eliminate-duplicate-chunks-of-data
Вот пример, который я придумал:
[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