How to list files in a zip without extra information in command line

93,297
zipinfo -1 file.zip

Or:

unzip -Z1 file.zip

Would list only the files.

If you still want the extra info for each file names, you could do:

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

Or:

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

Or (assuming GNU head):

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

Or you could use libarchive's bsdtar:

$ 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
Share:
93,297

Related videos on Youtube

Mike
Author by

Mike

Updated on September 18, 2022

Comments

  • Mike
    Mike over 1 year

    In my bash command line, when I use unzip -l test.zip I get the output like this:

    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
    

    But I am interested only by the lines containing the file details.

    I tried to make filtering using grep like this:

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

    But it is long and prone to error (e.g a file name Archive in this list will be dropped)

    Is there any other options with unzip -l (I checked the unzip man page and did not find any) or another tool to do so?

    It is important to me to not really unzip the archive but just to look what files are inside.

    • tripleee
      tripleee over 6 years
      The accepted answer is much better than this; but I want to remark that anything with multiple grep can be refactored into an Awk script, usually with much improved precision. awk 'NR >3 { if (/^ *---/) exit 0; print }' would trim the first three lines as well as the footer, and also be within reach of easily extracting just the file name (hint: print substr($0, 29)).
    • Mike
      Mike over 6 years
      Yes, I totally agree, that's is exactly why I ask that specific question: to have a better and viable solution.
  • Mike
    Mike about 10 years
    thanks powerful sed... exactly what I wanted; Also the zipinfo tool is interesting, I didn't know it.
  • Matt
    Matt over 4 years
    Is there a way to ignore directories? unzip -Z1 zipfile.zip will output: directory/ and directory/file.extension (Note: directory names with . is likely, so adding a | grep . doesn't work)
  • michael
    michael almost 4 years
    I was also looking for a way to exclude directories from the listing (bsdtar -tf also prints directories just like unzip -Z1), afaik this may be the only option: unzip -Z1 test.zip | grep -v '/$', since all entries that are just directory names have a trailing slash ( /). nb: however, if the goal was to remove directory prefix from the path, then each line would have to be processed with basename or bash equivalent stackoverflow.com/questions/965053/…