Обновление большого сжатого файла без создания временного файла

С помощью GNUsed:

sed -E 's/-v[0-9]{3}//' file
1
03.11.2020, 22:22
1 ответ

Это почти наверняка не сработает(обновление:см. также этот ответ)

Zip-архив (, но с другими архивами мало что меняется )построен как файловая система:

zip structure

Предположим, мы должны обновить файл #1 без перемещения файла #2, а файл #1 потенциально больше после сжатия. Это потребует:

  • удалить центральный заголовок
  • добавить файл #1 данные (2-я копия )после файла #2
  • снова добавить центральный заголовок с обновленным смещением для файла #1

создание «мертвой зоны» в начале Zip-файла. Было бы возможно использовать эту область для дальнейшего хранения другого файла. По сути, вам нужно заархивировать входящий файл во временный файл, получив таким образом его окончательный размер; вооружившись этим, вы сканируете zip-файл и ищете «дыры». Если существует подходящая «дыра», скопируйте временный файл внутрь zip-файла, возможно, оставив меньшую «дыру»; в противном случае добавьте его, заменив центральный заголовок.

Хотя возможно , управление свободным пространством внутри Zip-архива, а также объединение смежных «дыр» требуют осторожности, и, насколько мне известно, никто никогда этого не делал (. Я мог бы, например, написать независимая от сжатия -утилита для замены файла внутри Zip-файла, использующая основную утилиту zip для создания нового сжатого потока и заменяющая старое имя файла узнаваемой последовательностью, чтобы пометить его как свободное пространство; это было бы ужасно медленно ).

Самое близкое к тому, что вы хотите, это использовать совершенно другой формат -, который вы бы создали, скажем, btrfsфайловой системой на кольцевом устройстве,установив его на максимальное доступное сжатие (, я полагаю, что это будет LZO ). Затем вы монтируете петлевое устройство и используете rsyncдля его обновления. Размонтируйте петлевое устройство, и хост-файл будет сжатым архивом... своего рода. В зависимости от характера файла вы даже можете использовать возможности дедупликации btrfs.

Коэффициент сжатия сжатых файловых систем ниже, чем Zip, но несколько файлов (PDF, ZIP, очевидно, большинство форматов изображений, таких как JPEG, PNG и GIF, современные (Libre )Офисные форматы...)нельзя сжимать , так что это не проблема. Поскольку вы говорите, что несжатые файлы имеют размер 36 ГБ, а Zip — 32 ГБ, вы, вероятно, находитесь в этой ситуации и, вероятно, выиграете от несжатого -формата ).

1
18.03.2021, 22:53

Теги

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