web-dev-qa-db-fra.com

Extraire la liste des noms de fichiers dans une archive Zip lorsque `décompressez -l`

Quand je fais unzip -l zipfilename, Je vois

1295627  08-22-11 07:10   A.pdf
473980  08-22-11 07:10   B.pdf
...

Je veux seulement voir les noms de fichiers. J'essaye

unzip -l zipFilename | cut -f4 -d" "

mais je ne pense pas que le délimiteur soit simplement " ".

34
Thang Pham

En supposant qu'aucun des fichiers ne comporte d'espaces dans les noms:

unzip -l filename.Zip | awk '{print $NF}'

Ma sortie de décompression a à la fois un en-tête et un pied de page, donc le script awk devient:

unzip -l filename.Zip | awk '/-----/ {p = ++p % 2; next} p {print $NF}'

Une version qui gère les noms de fichiers avec des espaces:

unzip -l filename.Zip | awk '
    /----/ {p = ++p % 2; next}
    $NF == "Name" {pos = index($0,"Name")}
    p {print substr($0,pos)}
'
25
glenn jackman

La façon la plus simple de procéder consiste à utiliser la commande suivante:

unzip -Z -1 archive.Zip

ou

zipinfo -1 archive.Zip

Cela répertoriera uniquement les noms de fichiers, un sur chaque ligne.

Les deux commandes sont exactement équivalentes. Le -Z option indique à unzip de traiter le reste des options comme des options zipinfo. Voir les pages de manuel pour dézipper et zipinfo .

97
amicitas

Si vous devez gérer les noms de fichiers avec espaces, essayez:

unzip -l zipfilename.Zip | awk -v f=4  ' /-----/ {p = ++p % 2; next} p { for (i=f; i<=NF;i++) printf("%s%s", $i,(i==NF) ? "\n" : OFS) }'
6
peteretep

Utilisez awk:

unzip -l zipfilename | awk '{print $4}'
3
Manny D