Conta il numero di elementi di livello superiore nell'archivio ZIP


2

Sto cercando un comando terminale per contare il numero di elementi di livello superiore in un archivio ZIP. So che zip -l archive.zipmostrerà il conteggio dei file, ma questo mostra tutti i file, non solo gli elementi di livello superiore. Se archive.zipdecomprimerà quanto segue (* indica il livello superiore)

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

quindi vorrei un programma in uscita 5.


Usa unzip -l archive.zip|grep /|grep -v "/.*/"|wc -l. Il primo filtro mostra solo le righe con i file, il secondo elimina le sottodirectory e il terzo restituisce il conteggio delle righe. Se l'archivio ha percorsi assoluti, dovrai consentire due barre ed eliminarne tre o più.
AFH,

Questo mostra il numero di articoli di livello non superiore. Ma credo di poter solo sottrarre dall'output di unzip -l archive.zip | grep -v / | wc -l, giusto? Mi dispiace che il mio post originale non fosse chiaro
BallpointBen

Se ti perdi |wc -l, vedrai i file considerati ed è quelli di livello superiore. C'è un bug (!): Se il percorso dell'archivio contiene un singolo, /questo verrà conteggiato, quindi è necessario un filtro aggiuntivo per escluderlo, ad esempio sostituirlo grep /con grep "^ .*/".
AFH,

Risposte:


0

Ha preso ispirazione da AFH per utilizzare questa soluzione

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

Cosa fa:

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
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.