web-dev-qa-db-fra.com

Comment lister des fichiers dans un Zip sans informations supplémentaires en ligne de commande

Dans ma ligne de commande bash, lorsque j'utilise unzip -l test.Zip J'obtiens la sortie comme ceci:

Archive:  test.Zip
  Length      Date    Time    Name
---------  ---------- -----   ----
   810000  05-07-2014 15:09   file1.txt
   810000  05-07-2014 15:09   file2.txt
   810000  05-07-2014 15:09   file3.txt
---------                     -------
  2430000                     3 files

Mais je ne suis intéressé que par les lignes contenant les détails du fichier.

J'ai essayé de faire du filtrage en utilisant grep comme ceci:

unzip -l test.Zip | grep -v Length | grep -v "\-\-\-\-" | g -v Archive | grep -v " files"

Mais il est long et sujet à erreur (par exemple, un nom de fichier Archive dans cette liste sera supprimé)

Existe-t-il d'autres options avec unzip -l (j'ai vérifié la page de manuel unzip et je n'en ai pas trouvé) ou un autre outil pour le faire?

Il est important pour moi de ne pas vraiment décompresser l'archive mais simplement de regarder quels fichiers sont à l'intérieur.

39
рüффп
zipinfo -1 file.Zip

Ou:

unzip -Z1 file.Zip

N'afficherait que les fichiers.

Si vous voulez toujours les informations supplémentaires pour chaque nom de fichier, vous pouvez faire:

unzip -Zl file.Zip | sed '1,2d;$d'

Ou:

unzip -l file.Zip | sed '1,3d;$d' | sed '$d'

Ou (en supposant GNU head):

unzip -l file.Zip | tail -n +4 | head -n -2

Ou vous pouvez utiliser le libarchivebsdtar:

$ bsdtar tf test.Zip
file1.txt
file2.txt
file3.txt

$ bsdtar tvf test.Zip
-rw-rw-r--  0 1000   1000   810000 Jul  5  2014 file1.txt
-rw-rw-r--  0 1000   1000   810000 Jul  5  2014 file2.txt
-rw-rw-r--  0 1000   1000   810000 Jul  5  2014 file3.txt

$ bsdtar tvvf test.Zip
-rw-rw-r--  0 1000   1000   810000 Jul  5  2014 file1.txt
-rw-rw-r--  0 1000   1000   810000 Jul  5  2014 file2.txt
-rw-rw-r--  0 1000   1000   810000 Jul  5  2014 file3.txt
Archive Format: Zip 2.0 (deflation),  Compression: none
58