web-dev-qa-db-fra.com

Extraire uniquement un fichier spécifique d'une archive zippée vers un répertoire donné

J'ai besoin d'extraire un seul fichier d'un fichier Zip dont je connais le chemin. Existe-t-il une commande comme celle-ci:

unzip -d . myarchive.Zip path/to/zipped/file.txt

Malheureusement, la commande ci-dessus extrait et recrée le chemin complet du fichier à ./path/to/zipped/file.txt. Existe-t-il un moyen pour moi de simplement extraire le fichier dans un répertoire spécifié?

168
Naftuli Kay

Vous pouvez extraire uniquement le texte en sortie standard avec le -p option:

unzip -p myarchive.Zip path/to/zipped/file.txt >file.txt

Cela n'extrayera pas les métadonnées (date, autorisations,…), seulement le contenu du fichier. C'est le prix à payer pour la commodité de ne pas avoir à déplacer le fichier par la suite.

Alternativement, montez l'archive en tant que répertoire et copiez simplement le fichier. Avec AVFS :

mountavfs
cp -p ~/.avfs"$PWD/myarchive.Zip#"/path/to/zipped/file.txt .

Ou avec Fuse-Zip :

mkdir myarchive.d
Fuse-Zip myarchive.Zip myarchive.d
cp -p myarchive.d/path/to/zipped/file.txt .
fusermount -u myarchive.d; rmdir myarchive.d
unzip -j "myarchive.Zip" "in/archive/file.txt" -d "/path/to/unzip/to"

Entrez le chemin complet du fichier compressé, pas seulement le nom du fichier. Assurez-vous de conserver la structure telle qu'elle apparaît dans le fichier Zip.

Cela extraira le fichier unique file.txt dans myarchive.Zip à /path/to/unzip/to/file.txt.

169
sMyles

Version plus simple:

unzip ARCHIVE_NAME PATH_OF_FILE_INSIDE_ARCHIVE

Cela va recréer PATH_OF_FILE_INSIDE_ARCHIVE dans le répertoire courant mais extrait uniquement le fichier spécifié.

Pour répertorier tous les fichiers d'une archive Zip:

unzip -l ARCHIVE_NAME
25
Taukir

Sur macOS , qui utilise par défaut Info-Zip

Liste d'abord les fichiers pour trouver ce que vous voulez

unzip -l my.Zip

Fournissez ensuite une liste de fichiers à extraire de l'archive

unzip my.Zip annoying/path/to/file

Combinez avec -p pour stdout

unzip -p my.Zip annoying/path/to/file >./file
4

utilisation simple:

unzip zipfile.Zip path/inside/Zip/file.txt

et cela gonflera le fichier.

$ unzip -l ./../html.Zip | grep wp-config

     3328  07-22-2019 15:10   html/wp-config.php

     2898  01-07-2019 23:30   html/wp-config-sample.php

$ unzip ./../html.Zip html/wp-config.php

     Archive:  ./../html.Zip
     inflating: html/wp-config.php

$ ls -lrth

     total 4.0K
     drwxr-sr-x 2 Apache apache 4.0K Jul 26 14:41 html

$ ls -lrth html/*

     total 4.0K
     -rw-rw-rw- 1 Apache apache 3.3K Jul 22 15:10 wp-config.php

Extraire dans un répertoire relatif

unzip -j -d relativedir archive.Zip path/in/archive/file.ext

Extraire dans le répertoire courant

unzip -j -d . archive.Zip path/in/archive/file.ext

Extraire en dir absolu

unzip -j -d /absolutedir archive.Zip path/in/archive/file.ext
0
Gapmeister66