Search code examples
unix

How to get file name and total count in zip (Linux)


How do I get result will have file names at beginning total #count of files. When I run a command line below only shows number of files but not file names.

I would like to have zip file name and count number of documents in zip. Thanks

the output:

IAD1.zip 30000 files
IAD2.zip 24000 files
IAD3.zip 32000 files
.....

command line

zipinfo IAD${count}.zip |grep ^-|wc -l >>TotalCount.txt

with command above the result show number of documents in zip files:

30000
24000
32000
.....

Solution

  • zipinfo -h <file name> | tr '\n' ':' | awk -F':' '{print $2 , $5 , "files"}'
    

    explanation:

    • zipinfo -h -- list header line. The archive name, actual size (in bytes) and total number of files is printed.

    • tr '\n' ':' -- Replace new line with ":"

    • awk -F':' '{print $2 , $5 , "files"}' -- Read file as ":" delimited and print 2nd and 5th field

    Demo:

    :>zipinfo test.zip 
    Archive:  test.zip
    Zip file size: 2798 bytes, number of entries: 7
    -rw-r--r--  3.0 unx       18 tx stor 20-Mar-10 13:00 file1.dat
    -rw-r--r--  3.0 unx       32 tx defN 20-Mar-10 13:00 file2.dat
    -rw-r--r--  3.0 unx       16 tx stor 20-Mar-10 12:26 file3.dat
    -rw-r--r--  3.0 unx     1073 tx defN 20-Mar-12 05:24 join1.txt
    -rw-r--r--  3.0 unx      114 tx defN 20-Mar-12 05:25 join2.txt
    -rw-r--r--  3.0 unx      254 tx defN 20-Mar-11 09:39 sample.txt
    -rw-r--r--  3.0 unx     1323 bx stor 20-Mar-14 09:14 test,zip.zip
    7 files, 2830 bytes uncompressed, 1746 bytes compressed:  38.3%
    :>zipinfo -h test.zip | tr '\n' ':' | awk -F':' '{print $2 , $5 , "files"}'
      test.zip  7 files