Як розпакувати багаточастинний (розтягнутий) ZIP на Linux?


73

Мені потрібно завантажити файл на 400 Мб на свій веб-сервер, але я обмежений вмістом у 200 Мб. Мій хост запропонував використовувати розгорнутий архів, який я ніколи не робив у Linux.

Я створив тест в своїй папці, стиснути вгору PDF в test.zip.001, .002і .003. Як мені зробити розпакування? Чи потрібно мені спочатку приєднатися до них?

Зверніть увагу, що я би з такою ж радістю використовував 7z, як і я використовую ZIP формати. Якщо це має значення для результату.


Це може бути не корисним для веб-сервера з встановленим обмеженим програмним забезпеченням, але я не бачив цього рішення ніде більше, і це те, що я використовую: API java.util.zip розглядав усі частини ZIP, які я накинув на нього , навіть у більш загальному випадку відсутності кінцевих деталей або останньої частини неповної. Я називаю це від Jython, щоб він був у формі сценарію, і ось код: github.com/combatopera/unzipparts
Анджей

Відповіді:


74

Вам потрібно спочатку приєднатися до них. Ви можете використовувати загальну програму Linux, catяк у наведеному нижче прикладі:

cat test.zip* > ~/test.zip

Це зчепити всі ваші test.zip.001, test.zip.002і т.д файлів в один великий, test.zip файл. Коли у вас є один єдиний файл, ви можете запуститиunzip test.zip

"Як створити, розділити, з'єднати та витягнути архіви zip в Linux", можливо, допоможе.


1
Гаразд, мені це подобається ... Прогрес ... Але я справді тут Linux n00b. Я припускаю, що x*це ім'я файлу? А ~/hugefileчи є каталог? Яке призначення символу тильди? Вибачте, що запитую те, що я підозрюю, це дуже основні питання.
Тім

Коли ви розділяєте файли, вам слід використовувати префікс типу x_ (наприклад: x_split1, x_split2, ...; як файл файлів із суфіксами Windows.001, file.002 ... тощо), тильда представляє ваш домашній каталог. ~ / величезний файл - це те саме, що / home / tim / величезний файл. Ви розділили свої файли? які назви файлів розділених файлів?
fromnaboo

1
Я думаю, я бачу, де вийде проблема, архів Spanned був створений у Windows, використовуючи 7zip з розширенням ZIP, тому він автоматично створює як TEST.zip.001, TEST.zip.002і TEST.zip.003це означає, що розділення дуже відрізняється. Починає виглядати так, що може бути простіше кинути Linux на VMWare і створити тут файли, тоді принаймні я маю справу лише з 1 ОС. Чи можете ви використовувати команду SPLIT для будь-якого типу файлів? тобто зображення, аудіофільми тощо?
Тім

так, команда розділення працює на будь-якому файлі. встановіть p7zip з apt-get встановіть p7zip на debian або yum встановіть p7zip на fedora, з'єднайте файли за допомогою: cat TEST.zip. *> архівуйте та витягніть їх.
fromnaboo

1
7za x archiveймовірно, краще, якщо архів містить структуру каталогу.
slm

38

unzipУтиліта Linux насправді не підтримує багаточастинні блискавки. З посібника :

Багаточастинні архіви ще не підтримуються, за винятком спільного використання zip. (Усі частини повинні бути з'єднані разом для того, а потім zip -F (для zip 2.x) або zip -FF(для zip 3.x) необхідно виконати в об'єднаному архіві, щоб "виправити" його. Також zip 3.0 і пізніші можуть поєднуватися багаточастинні (розділені) архіви в комбінований однофайловий архів за допомогою zip -s- inarchive -O outarchive. Докладнішу інформацію див . на сторінці керівництва zip 3. )

Тому потрібно спочатку з’єднати шматки, після чого відремонтувати результат. cat test.zip.*об'єднує всі файли, які називаються test.zip.*там, де символом підстановки *є будь-яка послідовність символів; файли перераховуються в лексикографічному порядку, що таке саме, як числовий порядок завдяки нулю провідних даних. >test.zipспрямовує вихід у файл test.zip.

cat test.zip.* >test.zip
zip -FF test.zip --out test-full.zip
unzip test-full.zip

Якщо ви створили фрагменти, безпосередньо розділивши zip-файл, на відміну від створення багаточастинного поштового індексу за допомогою офіційної утиліти Pkzip, все, що вам потрібно зробити, це приєднати деталі.

cat test.zip.* >test.zip
unzip test.zip

1
2-а команда повинна бути zip -FF test.zip --out test-full.zip - дасть вам помилку без команди --out
Елвін

3
Для мене FFпідхід спрацював, якщо я вказував zipна перший багатоскладовий файл, не catпотрібен.
Jānis Elmeris

1
Як вже згадувалося @ JānisElmeris, не потрібно об'єднувати архіви перед використанням zip -FFу них.
Рене

24
7z x archive.zip.001

Він автоматично знайде решту


1
Це так дивно ... Щоб це працювало, спочатку потрібно перейменувати всі ZIP-файли (.zXX та .zip) у .zip.xxx (.zip - остання частина), потім можна використовувати 7z x на першій , який "витягує" зв'язаний zip, який потім може бути знову розпакований за допомогою unzip, але не 7z ... Я не зовсім впевнений, чи файл був розпакований правильно, але принаймні цього разу unzip не скаржиться на помилки CRC .. . ZIP настільки неймовірно зламаний в Linux - уникайте, якщо можете. :(
Energiequant

принаймні для центів, нам також потрібна інструкція, як встановити 7z
stiv

20

Відповідь я знайшов тут: https://superuser.com/a/517758/10264

Ця відповідь за концепцією схожа з такою у Gilles , а саме спочатку ви поєднуєте спліт архів у звичайний архів за допомогою split, а потім розпаковуєте його за допомогою unzip.

Різниця полягає в тому, що замість того, щоб використовувати -FFпрапор, який не працював для мене, ви просто скажете zip перепакувати розділений файл без розбиття. Саме це -s 0означає прапор.

Отже, спочатку об'єднайте архів розбиття в один архів:

zip -s 0 split-foo.zip --out unsplit-foo.zip

Потім витягніть єдиний архів за допомогою розпакування:

unzip unsplit-foo.zip

2
Це правильна відповідь на zip 3.x
texasbruce

0

Просто ще один приклад. Це працювало для мене, щоб розділити інсталятор Oracle 3GB:

echo "<installOracleDB.sh>: Splitting OracleDB installer"
zip /tmp/linuxx64_12201_database.zip --out /tmp/linuxx64_12201_oradb.zip -s 1000m
echo "<installOracleDB.sh>: Merging OracleDB installer"
zip -FF /tmp/linuxx64_12201_oradb.zip --out /tmp/linuxx64_12201_database.zip
echo "<installOracleDB.sh>: Removing temporary files OracleDB installer"
find /tmp -type f -name 'linuxx64_12201_oradb*' -exec rm {} +
echo "<installOracleDB.sh>: Unizipping OracleDB installer"
unzip /tmp/linuxx64_12201_database.zip

Це дуже схоже на попередні відповіді. Чи можете ви пояснити, що це робить, і чим воно відрізняється від того, що вже було розміщено? Будь ласка, не відповідайте на коментарі; відредагуйте свою відповідь, щоб зробити її більш зрозумілою та повною.
Скотт

Привіт Скотте, я хотів би, щоб я міг відповісти в коментарях, але я маю невеликі моменти, щоб зробити це прямо зараз. Ця відповідь дає повний перелік команд для розділення, об'єднання та розпакування великого файлу на unix. Я надам більше пояснювального тексту, щоб уточнити свою відповідь. Дякую за відповідь
TheHagueCoder

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.