Разделение на множество файлов .ZIP с использованием 7-Zip

1497
Kong

Если у меня есть папка размером 100 ГБ, и я разделяю ее на ZIP, есть ли разница в том, сколько места на диске используется, если я разделю ее на 100 .ZIP-файлов по 1 ГБ каждый или 10 .ZIP-файлов по 10 ГБ каждый?

Занимают ли 100 .ZIP-файлов по 1 ГБ каждый больше, чем 10 .ZIP-файлов по 10 ГБ каждый?

10
И вы не можете узнать, потому что? Dave 6 лет назад 0
Почему ты не можешь просто попробовать это? Peter Mortensen 6 лет назад 5
Каждый автономный ZIP-файл имеет некоторые накладные расходы. Тем не менее, вы можете разбить ZIP-файл на части, которые можно собрать. У этих частей нет издержек ZIP в каждом из них, и если вы разделяете границы секторов или блоков, они не содержат потерянного пространства. fixer1234 6 лет назад 1

2 ответа на вопрос

16
Layne Bernardo

Давайте разберемся!

100 МБ файлов (27 штук):

7z a -tzip -v100M ./100m/archive ./kali-linux-xfce-2018.2-amd64.iso

$ du ./100m/ 2677884 ./100m/ 

10 МБ файлов (262 штуки):

7z a -tzip -v10M ./10m/archive ./kali-linux-xfce-2018.2-amd64.iso

$ du ./10m/ 2677908 ./10m 

Результаты: разделенный архив на 10 МБ занимает дополнительные 24 КБ. Так что да, есть разница, файлы размером 100 1 ГБ будут занимать больше места, чем файлы размером 10 10 ГБ.

Разница кажется незначительной, хотя. Я бы пошел на то, что вам удобнее.

`du` по умолчанию не выводит размер в байтах (если только ваши 270M файлов не превратились в 2677908 байт). Он отображает размер файлов на диске, который может отличаться от фактического размера данных (может применяться для загрузки или хранения в других файловых системах). Xen2050 6 лет назад 4
Вы правы, это на самом деле вывод в КБ. Я отредактировал ответ, чтобы исправить это несоответствие. Исходный файл представляет собой Kali Linux ISO, он составляет ~ 2,6 ГБ. У вас есть хорошая точка зрения относительно размера на диске по сравнению с фактическим размером данных, я специально думал о размере на диске, потому что он учитывает накладные расходы на наличие дополнительных файлов, но вы правы, что это будет отличаться в зависимости от того, что вы ' на самом деле делать с архивами. Layne Bernardo 6 лет назад 0
Извините, я пересек с вашим в значительной степени похожим ответом, когда я дважды проверял строки выполнения. AFH 6 лет назад 0
Максимальный размер Zip-файла составляет 4 ГБ. pbies 6 лет назад 0
Re * «Разница кажется незначительной» *: Что это в%? Peter Mortensen 6 лет назад 0
@PeterMortensen Смотрите другой ответ. Разница лишь в том, сколько дополнительного места требуется файловой системе для хранения другого файла. Сам файл не больше. Alexander O'Mara 6 лет назад 0
Да, именно поэтому я не удосужился рассчитать процент. Я не думаю, что это работает до плоского процента от исходного размера файла, особенно учитывая различия в файловых системах. Layne Bernardo 6 лет назад 1
@PeterMortensen Это не пропорциональная потеря. Это фиксированные накладные расходы на файл. Таким образом, итоговый «процент» в целом будет зависеть от количества файлов в каждом сценарии и рассчитывать тривиально. Lightness Races in Orbit 6 лет назад 0
16
AFH

Каждый файл имеет накладные расходы файловой системы на неиспользуемое пространство логического сектора после конца файла, но это устраняется, если размер разделения кратен размеру логического сектора (не обязательно верно для моего примера ниже).

Могут быть дополнительные байты, используемые дополнительными записями каталога, но они не будут отображаться, если каталог теперь не занимает дополнительный логический сектор.

Разделенные файлы идентичны по содержанию файлам, созданным двоичной программой-разделителем с таким же размером разделения.

Я проверил это в Linux, используя версию GUI для файла размером 7+ МБ, предоставив 8 разделенных файлов размером 1 МБ с помощью 7-Zip ( File.7z.00?), а затем создал один полный архив ( Full.7z), который я разделил: -

7z -v1000000 a File; # Create split volumes File.7z.00? 7z a Full File; # Create full archive Full.7z split -b 1000000 -a 3 --numeric-suffixes=1 Full.7z Full.7z.; # Split full archive into Full.7z.00? for f in ; do cmp Full.7z.$f File.7z.$f; done; # Compare splits with 7z volumes 

Для тестирования на другой ОС вам может понадобиться загрузить или написать соответствующую программу-разветвитель.

Похожие вопросы