J'ai de nombreuses archives zip, chacune contenant un certain nombre d'archives zip. Quelle est la meilleure façon d'extraire récursivement tous les fichiers contenus dans cette archive zip et ses archives zip enfant, qui ne sont pas des archives zip elles-mêmes?
15
Réponses:
Cela extraira tous les fichiers zip dans le répertoire courant, à l'exception de tous les fichiers zip qu'ils contiennent.
Bien que cela extrait le contenu du répertoire en cours, tous les fichiers ne se retrouveront pas strictement dans ce répertoire car le contenu peut inclure des sous-répertoires.
Si vous vouliez réellement tous les fichiers strictement dans le répertoire courant, vous pouvez exécuter
Remarque: cela encombrera les fichiers s'il y en a deux avec le même nom dans des répertoires différents.
Si vous souhaitez extraire récursivement tous les fichiers zip et les zips qu'ils contiennent, ce qui suit extrait tous les fichiers zip du répertoire en cours et tous les zips qu'ils contiennent dans le répertoire en cours.
la source
while [ "
trouver . -type f -nom '*.? ar' | wc -l" -gt 0 ]; do find -type f -name "*.?ar" -exec mkdir -p '{}.dir' \; -exec unzip -d '{}.dir' -- '../{}' \; -exec rm -- '{}' \;; done
Pour autant que je sache, vous avez des archives zip qui elles-mêmes contiennent des archives zip, et vous souhaitez décompresser les zips imbriqués chaque fois qu’une est extraite.
Voici un script bash 4 qui décompresse tous les zips du répertoire actuel et de ses sous-répertoires de manière récursive, supprime chaque fichier zip après qu'il a été décompressé et continue tant qu'il y a des fichiers zip. Un fichier zip dans un sous-répertoire est extrait par rapport à ce sous-répertoire. Attention: non testé, faites une sauvegarde des fichiers originaux avant de l'essayer ou remplacez-le
rm
en déplaçant le fichier zip en dehors de l'arborescence des répertoires .Le script fonctionnera également dans zsh si vous remplacez la
shopt
ligne parsetopt nullglob
.Voici un équivalent portable. La condition de terminaison est un peu compliquée car
find
ne renvoie pas spontanément un statut pour indiquer s'il a trouvé des fichiers. Avertissement: comme ci-dessus.la source
unzip
ne le fait pas, car la manière UNIX est de faire une chose et de bien le faire, de ne pas gérer tous les cas spéciaux fous dans chaque outil. Ainsi, vous devez utiliser le shell (qui fait bien le travail de "lier les choses"). Cela en fait une question de programmation, et puisque TOUTES les questions de programmation possibles ont été résolues sur StackOverflow, ici: Comment décompressez-vous récursivement des archives dans un répertoire et ses sous-répertoires à partir de la ligne de commande Unix?la source
Ce script perl extraira chaque fichier .zip dans son propre sous-répertoire. Exécutez le script plusieurs fois pour gérer les fichiers zip imbriqués. Il ne supprime pas les fichiers .zip après l'extraction, mais vous pouvez apporter cette modification en ajoutant un appel unlink ().
la source
La manière la plus simple est d'utiliser atool: http://www.nongnu.org/atool/ C'est un très bon script qui utilise des programmes zip, unzip, tar, rar etc. pour extraire n'importe quelle archive.
Utilisez-les
atool -x package_name.zip
pour tous les décompresser ou si vous souhaitez les utiliser dans un répertoire contenant de nombreux fichiers zip, utilisez unefor
boucle simple :for f in *; do atool -x $f; fi
(vous devrezcd
dans le répertoire souhaité avec des fichiers zip avant de l'utiliser).la source
atool
Le comportement de ici ne diffère pas significativement de la décompression je dirais, il n'extrait pas récursivement les fichiers ZIP non plus.Vous devrez être prudent en décompressant automatiquement les fichiers zip à l'intérieur des fichiers zip:
http://research.swtch.com/2010/03/zip-files-all-way-down.html
Il est possible de concocter un fichier zip qui produit un fichier zip en sortie, qui produit un fichier zip en sortie, etc etc etc. Autrement dit, vous pouvez créer un fichier zip qui est une once fixe de "décompresser" le programme.
De plus, il me semble que les gens fabriquent des fichiers zip qui "explosent", c'est-à-dire qu'un très petit fichier zip se décompresse en plusieurs gigaoctets de sortie. Il s'agit d'une facette de la méthode de compression.
la source
Peut-être que cela aidera (a fonctionné pour moi):
la source
J'avais besoin d'une solution comme celle de Giles à partir de 2010, sauf que j'avais besoin de préserver la structure des dossiers, de ne pas tout décompresser dans le répertoire de niveau supérieur. Voici mon point de vue sur le sien avec trois lignes ajoutées / modifiées:
la source
Découvrez cet utilitaire nzip basé sur java pour les fichiers zip imbriqués. L'extraction et la compression de zips imbriqués peuvent être effectuées facilement à l'aide des commandes suivantes
java -jar nzip.jar -c list -s readme.zip
java -jar nzip.jar -c extract -s "C: \ project \ readme.zip" -t readme
java -jar nzip.jar -c compress -s readme -t "C: \ project \ readme.zip"
PS. Je suis l'auteur et serai heureux de corriger rapidement tout bogue.
la source