Comment extraire uniquement un dossier spécifique d'une archive compressée dans un répertoire donné?

59

Comment extraire un dossier spécifique d'une archive compressée dans un répertoire donné?

J'ai essayé d'utiliser

unzip "/path/to/archive.zip" "in/archive/folder/" -d "/path/to/unzip/to"

mais cela ne crée que le dossier sur le chemin que je souhaite décompresser et ne fait rien d’autre.

Enkouyami
la source

Réponses:

60
unzip <target-zip-file> '<folder-to-extract/*>' -d <destination-path> 

fonctionne bien sur EL 6

poursuivre en justice
la source
3
quelle est cette EL 6?
Zelda
2
Enterprise Linux 6 (RHEL6) - Red Hat.
slm
Cela fonctionne aussi c'est fondamentalement la même réponse que celle de Mark Adler, mais d'une manière légèrement différente.
Enkouyami
@ Enkouyami Moins les différences de citation, cela ressemble exactement à la même chose.
Camilo Martin
1
@Enkouyami Parce que la barre oblique inversée entre guillemets échappe à un caractère (on suppose que l'astérisque est échappé, mais j'imagine que c'est une faute de frappe), alors que la guillemet simple n'est pas interprétée dans les guillemets simples. Si on veut une barre oblique inverse littérale, "\\"on l'utilisera (sinon, vous devrez toujours vous rappeler quels caractères sont des échappées spéciales). C'est donc une différence de citation si l'auteur voulait dire "citer le caractère glob" (inutile). De toute façon, une simple barre oblique inversée comme celle-ci est une faute de frappe.
Camilo Martin
39

Essayer:

unzip /path/to/archive.zip 'in/archive/folder/*' -d /path/to/unzip/to
Mark Adler
la source
4
a fait ça? Je reçois caution: filename not matched: foldername/\*quand je cours unzip $repozip "$2-master/\*" -d /srv/www/magento/$2est le nom du dossier dans le zip je veux extraire tous les fichiers et dossiers de
jeremy.bass
10
Travaillé sans \, juste "path/*".
Alex
8
Est-il possible d'extraire le contenu de "dans / archive / folder / *" sans conserver le chemin "dans / archive / folder /"? Je finis par utiliser mvensuite pour obtenir des fichiers là où j’en avais besoin.
jerrygarciuh
6
Utilisez -jpour ça.
Mark Adler
4
-jsupprime toutes les informations de chemin et tous les fichiers sont placés dans le dossier cible. Existe-t-il un moyen de ne supprimer que la partie commune du chemin? Semblable à zip -r.
Bob Stein
6

Les deux réponses existantes sont correctes, mais il est un peu délicat de spécifier le répertoire cible, qui devrait être mieux précisé.

Disons que /target/root/le répertoire cible de l’action originale de décompression, par exemple:

unzip -qq src.zip -d "/target/root/"

Ensuite, nous devons utiliser le même /target/root/que le répertoire cible par la suite, même si nous souhaitons n’extraire qu’un sous-répertoire spécifique, comme dans le cas de la méthode de décompression:

unzip -qq src.zip "sub/dir/*" "/target/root/"

Après tout, la règle est simple, utilisez le même répertoire racine cible pour l’ -doption .

BTW, l' -qqoption est que le fichier de décompression soit très silencieux, n'hésitez pas à le supprimer.

Ryenus
la source
Pour votre information: j'ai <kbd> unzip -qq 2.3.zip "magento2-2.3 / vendor / *" "vendor /" </ kbd> et obtenu <kbd> attention: le nom du fichier ne correspond pas: vendor / `</ kbd>. Ceci est sur une installation Ubuntu à Bash. J'ai rarement décompressé, probablement fait autre chose de mal ...
Chris K