Comment décompresser un ZIP multipart (étendu) sous Linux?


74

Je dois télécharger un fichier de 400 Mo sur mon serveur Web, mais je suis limité à 200 Mo. Mon hôte m'a suggéré d'utiliser une archive fractionnée, ce que je n'ai jamais fait sous Linux.

J'ai créé un test dans son propre dossier, passer comme un éclair un PDF en test.zip.001, .002et .003. Comment puis-je décompresser le fichier? Dois-je les rejoindre d'abord?

Veuillez noter que je serais tout aussi heureux d’utiliser 7z que d’utiliser les formats ZIP. Si cela fait une différence dans le résultat.


Cela peut ne pas être utile sur un serveur Web sur lequel un logiciel limité est installé, mais je n’ai jamais vu cette solution ailleurs, et c’est ce que j’utilise: l’API java.util.zip a traité toutes les parties ZIP que j’ai lancées. , même dans le cas plus général de ne pas avoir de parties en queue ou la dernière partie étant incomplète. Je l'appelle de Jython, donc c'est sous la forme d'un script, et voici le code: github.com/combatopera/unzipparts
Andrzej Cichocki

Réponses:


75

Vous devrez d'abord les rejoindre. Vous pouvez utiliser l'application linux commune, catcomme dans l'exemple ci-dessous:

cat test.zip* > ~/test.zip

Cela concaténera tous vos fichiers test.zip.001. test.zip.002, Etc dans un fichier test.zip plus volumineux. Une fois que vous avez ce fichier unique, vous pouvez exécuterunzip test.zip

"Comment créer, scinder, joindre et extraire des archives zip sous Linux" peut aider.


1
OK, j'aime ça ... Progrès ... Mais je suis vraiment un Linux n00b ici. je supposex* c'est le nom du fichier? Et ~/hugefileest un répertoire? Quel est le but du symbole tilde? Désolé de poser ce que je soupçonne être des questions très basiques.
Tim

lorsque vous divisez les fichiers, vous devez utiliser un préfixe tel que x_ (ex: x_split1, x_split2, ...; comme les suffixes windows fichier 001, fichier 002, etc.), le tilde représente votre répertoire personnel. ~ / hugefile est identique à / home / tim / hugefile. Avez-vous divisé vos fichiers? Quels sont les noms des fichiers scindés?
fromnaboo

1
Je pense que je vois où le problème va venir, l’archive Spanned a été créée dans Windows, en utilisant 7zip avec une extension ZIP, de sorte qu’elle se crée automatiquement en tant que TEST.zip.001 , TEST.zip.002et ce TEST.zip.003qui signifie que la répartition est très différente. Il semble qu'il soit plus facile de lancer Linux sur un VMWare et de créer les fichiers ici, alors au moins, je ne traite qu'avec 1 SE. Pouvez-vous utiliser la commande SPLIT sur TOUT type de fichier? c'est-à-dire des images, des films audio, etc.?
Tim

oui, la commande split fonctionne sur tous les fichiers. installez p7zip avec apt-get installez p7zip sous debian ou yum installez p7zip sous fedora, joignez les fichiers avec: cat TEST.zip. *> archive et extrayez-les avec.
fromnaboo

1
7za x archiveest probablement mieux si l’archive contient une structure de répertoires.
slm

38

L' unziputilitaire Linux ne prend pas vraiment en charge les zips en plusieurs parties. Du manuel :

Les archives en plusieurs parties ne sont pas encore prises en charge, sauf en conjonction avec zip. (Toutes les parties doivent être concaténées ensemble dans l'ordre, puis zip -F (pour zip 2.x) ou zip -FF(pour zip 3.x) doivent être exécutées sur l'archive concaténée afin de la «réparer». De plus, zip 3.0 et les versions ultérieures peuvent être combinés. archiver en plusieurs parties (scindées) en une archive combinée à fichier unique en utilisant ( zip -s- inarchive -O outarchiveconsultez la page de manuel zip 3 pour plus d’informations).

Il faut donc d'abord concaténer les morceaux, puis réparer le résultat. cat test.zip.*concatène tous les fichiers appelés test.zip.*où le caractère générique *représente une séquence de caractères quelconque; les fichiers sont énumérés dans l'ordre lexicographique, ce qui est identique à l'ordre numérique grâce aux zéros précédant. >test.zipdirige la sortie dans le fichier test.zip.

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

Si vous avez créé les morceaux en séparant directement le fichier zip, par opposition à la création d'un zip en plusieurs parties avec l'utilitaire officiel Pkzip, il vous suffit de joindre les parties.

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

1
la 2ème commande devrait être zip -FF test.zip --out test-full.zip - vous donnera une erreur sans la commande --out
Alvin

3
Pour moi, l' FFapproche a fonctionné si je pointais zipsur le premier fichier en plusieurs parties, pas catnécessaire.
Jānis Elmeris

1
Comme @ JānisElmeris l'a déjà mentionné, il n'est pas nécessaire de concaténer les archives avant de les utiliser zip -FF.
René

24
7z x archive.zip.001

Il trouvera automatiquement le reste


1
C'est tellement bizarre ... Pour que cela fonctionne, vous devez d'abord renommer tous les fichiers ZIP (.zXX et .zip) en .zip.xxx (la dernière partie est .zip), puis vous pouvez utiliser 7z x sur le premier. , qui "extrait" vers un zip concaténé qui peut ensuite être décompressé en utilisant unzip mais pas 7z ... Je ne suis pas tout à fait sûr si le fichier a été décompressé correctement mais au moins cette fois-ci, le décompression ne se plaint pas des erreurs de CRC. ZIP est si incroyablement endommagé sous Linux - évitez si vous le pouvez. :(
Energiequant

au moins pour les centos, nous avons aussi besoin d’instructions pour installer 7z
stiv

20

J'ai trouvé la réponse ici: https://superuser.com/a/517758/10264

Cette réponse est similaire à celle de Gilles , à savoir que vous combinez d'abord l'archive divisée en une archive normale en utilisant split, puis vous la décompressez en utilisant unzip.

La différence est qu'au lieu d'utiliser l' -FFindicateur, ce qui ne fonctionnait pas pour moi, vous dites simplement à zip de remballer le fichier fractionné sans le fractionner. C'est ce que le-s 0 drapeau signifie.

Donc, tout d’abord, combinez l’archive divisée en une archive unique:

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

Ensuite, extrayez l’archive unique en utilisant unzip:

unzip unsplit-foo.zip

2
C’est la bonne réponse pour zip 3.x
texasbruce

0

Juste un autre exemple. Cela a fonctionné pour moi à bash pour scinder le programme d’installation d’oracle de 3 Go:

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

Cela ressemble beaucoup aux réponses précédentes. Pouvez-vous expliquer ce qu'il fait et en quoi cela diffère de ce qui a déjà été posté? S'il vous plaît ne répondez pas dans les commentaires; éditez votre réponse pour la rendre plus claire et plus complète.
Scott

Bonjour Scot, J'aimerais pouvoir répondre aux commentaires mais je dois faire quelques petits points pour le faire maintenant. Cette réponse donne une liste complète des commandes permettant de fractionner, de fusionner et de décompresser un fichier volumineux sous Unix. Je vais fournir un texte plus explicatif pour clarifier ma réponse. Merci pour votre réponse.
TheHagueCoder

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.