Hitung jumlah item tingkat atas dalam arsip ZIP

2

Saya mencari perintah terminal untuk menghitung jumlah item tingkat atas dalam arsip ZIP. Saya tahu itu zip -l archive.zipakan menunjukkan jumlah file, tetapi ini menunjukkan semua file, bukan hanya item tingkat atas. Jika archive.zipakan unzip ke berikut ini (* menunjukkan tingkat atas)

* Dir1
    File1
    File2
* Dir2
    File3
    File4
    File5
    File6
* Dir3
* File7
* File8

maka saya ingin program untuk keluaran 5.

BallpointBen
sumber
Gunakan unzip -l archive.zip|grep /|grep -v "/.*/"|wc -l. Filter pertama hanya menampilkan baris dengan file, yang kedua menghilangkan subdirektori dan yang ketiga mengembalikan jumlah baris. Jika arsip memiliki jalur absolut, Anda harus mengizinkan dua garis miring dan menghilangkan tiga atau lebih.
AFH
Ini menunjukkan jumlah item level non-top. Tapi saya kira saya bisa mengurangi dari output unzip -l archive.zip | grep -v / | wc -l, kan? Maaf postingan asli saya tidak jelas
BallpointBen
Jika Anda kehilangan, |wc -lAnda akan melihat file dipertimbangkan, dan itu yang tingkat atas. Ada bug (!): Jika jalur arsip berisi satu /ini akan dihitung, jadi Anda perlu filter tambahan untuk mengecualikannya, misalnya ganti grep /dengan grep "^ .*/".
AFH

Jawaban:

0

Mengambil inspirasi dari AFH untuk menggunakan solusi ini

zipinfo -1 archive.zip | 
    egrep '^[^/]+/?$' | 
    egrep -v '__MACOSX' | 
    wc -l |
    awk '{$1=$1};1'

Apa fungsinya:

Get list of files in archive
Filter for top-level files or dirs; must either contain no '/' or end in '/'
Remove lines containing __MACOSX (for archives created on a Mac)
Get line count
Remove trailing whitespace; http://unix.stackexchange.com/a/205854/169465
BallpointBen
sumber