Comment avez-vous récursivement décompresser les archives dans un répertoire et ses sous-répertoires à partir de la ligne de commande Unix?
La unzip
de commande ne dispose pas d'une option pour récursivement la décompression des archives.
Si j'ai de la structure de répertoire suivante et archives:
/Mother/Loving.zip /Le Scorbut/Mer Dogs.zip /Scurvy/Cures/Limes.zip
Et je veux décompressez les archives dans les dossiers avec le même nom que chaque archive:
/Mother/Loving/1.txt /Mother/Loving.zip /Le Scorbut/Mer Dogs/2.txt /Le Scorbut/Mer Dogs.zip /Scurvy/Cures/Limes/3.txt /Scurvy/Cures/Limes.zip
Quelle commande ou des commandes aurais-je point?
Il est important que cela ne va pas s'étouffer sur les noms de fichiers contenant des espaces entre eux.
- Comment à propos de fichier long des chemins... au-delà de 260 caractères...: superuser.com/a/1263234/439537
Vous devez vous connecter pour publier un commentaire.
Si vous souhaitez extraire les fichiers dans le dossier respectif, vous pouvez essayer ce
Un multi-traitées version pour les systèmes qui peuvent traiter de haute-je/O:
results.log
cela va entraîner des problèmes lorsque vous essayez de décompresser plusieurs copies du même fichier dans un dossier. Je suis d'essayer ce sur Cygwin. Il ressemble à la-d "'dirname...
partie est censé s'occuper de cela, mais il ne fonctionne pas pour moi.Voici une solution qui implique la commande rechercher et d'une boucle while:
Une solution qui gère correctement tous les noms de fichiers (y compris les retours à la ligne) et extrait dans un répertoire qui est dans le même emplacement que le fichier avec l'extension supprimée:
Noter que vous pouvez facilement faire traiter plus de types de fichiers (tels que
.jar
) en les ajoutant à l'aide de-o
, par exemple:Vous pouvez utiliser find avec l'-exec drapeau dans une seule ligne de commande pour faire le travail
-exec
y compris-d
. Notez que vous devez prendre soin lors de l'appel desh
pour s'assurer qu'un mauvais nom de fichier comme"; rm -rf /;
n'est pas exécutée.Quelque chose comme gunzip à l'aide de l'option-r drapeau?....
De déplacement de la structure de répertoire de façon récursive. Si l'un des noms de fichier spécifié sur la ligne de commande sont des répertoires, gzip va descendre dans le répertoire et de compresser tous les fichiers qu'il trouve là-bas (ou de les décompresser dans le cas de gunzip ).
http://www.computerhope.com/unix/gzip.htm
Cela fonctionne parfaitement que nous voulons:
Décompresser des fichiers:
Commande ci-dessus ne permet pas de créer des copies de répertoires.
Supprimer tous les fichiers zip:
Si vous êtes en utilisant cygwin, la syntaxe est légèrement différent pour le nom de base de commande.
Je sais que c'est très vieux, mais il a été parmi les premiers hits sur Google quand j'étais à la recherche d'une solution à quelque chose de similaire, donc je vais poster ce que j'ai fait ici. Mon scénario est légèrement différente, car en gros, je voulais juste complètement exploser un bocal, avec tous les pots qu'il contient, j'ai donc écrit ce qui suit bash fonctions:
Note le
<file-where-this-function-is-stored>
qui est nécessaire si vous voulez enregistrer ce dans un fichier qui n'est pas lu, pour un non-shell interactif comme il m'est arrivé d'être. Si vous stockez les fonctions dans un fichier chargé sur la non-shell interactif (par exemple,.bashrc
je crois) vous pouvez supprimer l'ensemblesource
déclaration. J'espère que cela aidera quelqu'un.Un petit avertissement -
explodeFile
supprime également les utilisateurs avancés ou fichier, vous pouvez bien sûr les modifier qu'en commentant la dernière ligne.Une autre solution intéressante serait: