Как разделить ZIP-файл на более мелкие ZIP-файлы

Есть ли способ разбить ZIP-архив на более мелкие zip-файлы, где вам не нужно превращать их в один большой zip-файл, чтобы распаковать меньшие zip-файлы?

Например: разбить файл размером 25 ГБ в 5 файлов по 5 ГБ каждый -> archive1.zip, ..., archive5.zip. Теперь я хочу извлечь данные из архива "archive1.zip" без повторного создания zip-файла на 25 ГБ.

Я знаю, что есть zipsplit, но он работает только до 2 ГБ, а у меня есть файлы до 100 ГБ.

Большое спасибо заранее

2
задан 16 May 2019 в 11:52

2 ответа

Боюсь, нет способа делать то, что ты хочешь. если у вас огромный zip-файл, вы можете разбить его на множество небольших файлов, используя split, но тогда эти файлы не будут действительными .zip архивами и не могут быть распакованы. Формат сжатого архива требует корректного заголовка, и при разделении архива у созданных вами подфайлов его не будет.

Думайте об этом, как об очень длинной отвертке. Вы можете разрезать это на более мелкие биты, но только бит, имеющий головку отвертки, все еще может функционировать как отвертка. Вы не можете просто выбрать одну из средних частей и ожидать, что она будет функционировать как крошечная отвертка.

Боюсь, у вас нет выбора, кроме как воссоздать огромный ZIP-архив и извлечь его.

0
ответ дан 16 May 2019 в 11:52

Как разбить zip-файл на меньшие zip-файлы

В Linux есть общая команда, которая на самом деле называется split . Он поддерживает расширения, максимальный размер и даже максимальный номер строки:

   -a, --suffix-length=N
          generate suffixes of length N (default 2)

   --additional-suffix=SUFFIX
          append an additional SUFFIX to file names

   -b, --bytes=SIZE
          put SIZE bytes per output file

   -C, --line-bytes=SIZE
          put at most SIZE bytes of records per output file

   -d     use numeric suffixes starting at 0, not alphabetic

   -l, --lines=NUMBER
          put NUMBER lines/records per output file

. И собрать их вместе можно просто cat. 3 примера:

cat f1 f2 f3 > original.zip
cat dir/* > original.zip
for file in *; do cat $file >>original.zip; done

Теперь я хочу извлечь данные из архива "archive1.zip" без повторного создания zip-файла на 25 ГБ.

unzip -l ARCHIVE_NAME перечислит файлы в zip-архиве. Это работает на весь zip-файл для извлечения 1 файла:

unzip -j file.zip "dir/in/archive/file.txt" 

и восстанавливает «dir / in / archive / file.txt» в текущем каталоге. Я не видел доказательств этой работы над частью почтового файла. И тогда это будет сценарий попадания / пропуска: файл может быть частично внутри предыдущей и следующей части. Я сомневаюсь, что это возможно без воссоздания файла; но это можно сделать «на лету».

0
ответ дан 16 May 2019 в 11:52

Другие вопросы по тегам:

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