web-dev-qa-db-fra.com

Comment décompresser un Zip en plusieurs parties (fractionné) sous Linux?

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

J'ai créé un test dans son propre dossier, zippant un PDF dans test.Zip.001, .002, et .003. Comment puis-je le décompresser? Dois-je d'abord les rejoindre?

Veuillez noter que je serais aussi heureux d'utiliser 7z que j'utilise des formats Zip. Si cela fait une différence dans le résultat.

79
Tim

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

cat test.Zip* > ~/test.Zip

Cela concaténera tous vos test.Zip.001, test.Zip.002, etc. dans un fichier test.Zip plus grand. Une fois que vous avez ce fichier unique, vous pouvez exécuter unzip test.Zip

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

84
fromnaboo

L'utilitaire Linux unzip ne prend pas vraiment en charge les zips en plusieurs parties. Depuis le 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) doit être exécuté sur l'archive concaténée afin de la "réparer". De plus, Zip 3.0 et versions ultérieures peuvent combiner des archives en plusieurs parties (fractionnées) en une archive combinée à fichier unique en utilisant Zip -s- inarchive -O outarchive. Voir page de manuel Zip pour plus d'informations.)

Vous devez donc d'abord concaténer les pièces, 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 toute séquence de caractères; les fichiers sont énumérés dans l'ordre lexicographique, qui est le même que l'ordre numérique grâce aux zéros de tête. >test.Zip dirige 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 divisant directement le fichier Zip, au lieu de créer un Zip en plusieurs parties avec l'utilitaire officiel Pkzip, tout ce que vous avez à faire est de joindre les pièces.

cat test.Zip.* >test.Zip
unzip test.Zip
7z x archive.Zip.001

Il trouvera automatiquement le reste

28
mist

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

Cette réponse est similaire dans son concept à celle de Gilles , à savoir d'abord que vous combinez l'archive fractionnée en une archive normale en utilisant la division, puis vous la décompressez en utilisant la décompression.

La différence est qu'au lieu d'utiliser le -FF flag, qui n'a pas fonctionné pour moi, vous dites simplement à Zip de remballer le fichier divisé sans le fractionner. C'est ce que le -s 0 flag signifie.

Donc, tout d'abord, combinez l'archive fractionnée en une seule archive:

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

Ensuite, extrayez l'archive unique à l'aide de la décompression:

unzip unsplit-foo.Zip
21
Paul Wagland

Si vous avez une grande collection de fichiers ou tout simplement de très gros fichiers, cette commande Assembly est assez pratique car elle vous donne une barre de progression:

 $ pv files.Zip* | cat - > uberFile.Zip
 25.0GiB 0:50:24 [8.48MiB/s] [============================================================>] 100%
 $ unzip uberFile.Zip

Je viens de l'utiliser pour combiner et extraire une archive fractionnée de 25 Go.

0
Zexelon

Je pense qu'il vaut la peine de mentionner que l'outil de ligne de commande unar est capable de décompresser, unRar, un7Zip, unTar etc., y compris les fichiers fractionnés, avec juste:

unar first_file

https://directory.fsf.org/wiki/Unar#Details

0
Guariba Som

Juste un autre exemple. Cela a fonctionné pour moi dans bash pour diviser le programme d'installation 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
0
TheHagueCoder

Pour un Zip en plusieurs parties provenant d'un téléchargement de Google Drive, j'ai essayé plusieurs des méthodes expliquées, mais je n'ai pas (bien) fonctionné. Je pourrais enfin le faire d'une manière simple à partir du terminal: décompressez filename.Zip.001 lorsque vous avez fini d'extraire le même avec la partie suivante: décompressez filename.Zip.002 et ainsi de suite ...

Une autre option: 7z x filename.Zip.001 lorsque vous avez fini d'extraire la même chose avec la partie suivante: 7z x filename.Zip.002 et ainsi de suite ...

0
carregul