Come elencare il contenuto di tutti i file .zip in una cartella e grep per un file specifico?


28

Ho 348 file zip e voglio trovare un file che si trova in uno dei file zip, unzip -lnon funziona con i caratteri jolly?

Come posso elencare il contenuto di tutti i .zipfile e grepattraverso l'elenco unito di tutti i file contenuti nelle zip?

Risposte:


17

L'uso zipinfoè un'ottima soluzione qui. Tuttavia, in generale ogni volta che si desidera applicare un comando a un elenco di file e il comando non accetta un elenco di file, è possibile utilizzare un forciclo:

for file in *.zip; do
    unzip -l "$file"
done \
| grep "\.zip\|setup"

Se il file che stai cercando ha spazi come:: your filenell'espressione regolare grep devi scappare da ogni spazio con una barra rovesciata come grep "\.zip\|your\ file".


Funziona perfettamente, l'unico problema è che non mostra il nome della zip,
Eduard Florinescu,

Ho modificato il tuo post e ho aggiunto un'espressione regolare per visualizzare anche il nome del file in cui si trova l'installazione, +1 e accetta
Eduard Florinescu,

Oh sì, avevo dimenticato le citazioni sull'argomento unzip, quanto imbarazzante.
Konrad Rudolph,

1
@JaySullivan Non utilizzare questo codice, non funzionerà per i percorsi contenenti spazi. Non convogliare mai l'uscita di ls. Si potrebbe utilizzare findinvece.
Konrad Rudolph,

12

È possibile utilizzare zipinfo. È incluso nell'installazione predefinita di Ubuntu. Controlla la pagina del manuale per maggiori informazioni.

Ad esempio, per cercare un modello setupin un gruppo di file zip nella directory corrente, utilizzare questo comando:

find ./ -iname *zip 2> /dev/null -print0 | xargs -0 zipinfo | grep setup

Ottengo un caution: filename not matched: case1.zip... caution: filename not matched: case348.zipper ogni zip, testato su due sistemi operativi Ubuntu, 11.10 e 12.04.
Eduard Florinescu,

@EduardFlorinescu Prova la risposta aggiornata. Sebbene la risposta funzionasse per me
Anwar,

il problema è che il file potrebbe contenere quello setupe mette lo stesso errore, anche se funziona così:zipinfo -l * | grep "setup"
Eduard Florinescu,

Ho modificato la risposta. Penso che sia più robusto ora
Anwar,

1
Grazie, +1 per lo sforzo, ma comunque non funzionerà se il file zip ha spazi nel suo nome.
Eduard Florinescu,

6

Per elencare i file in un archivio zip è possibile utilizzare il seguente comando.

unzip -l

Per grep un archivio compresso è necessario utilizzare le utilità di archivio compresso create per funzionare con quel tipo di formato di archivio.

Per archivi zip:

zipgrep --help  
usage: zipgrep [egrep_options] pattern zipfile [members...]
Uses unzip and egrep to search the zip members for a string or pattern.

Per archivi tar:

zgrep --help
Usage: /bin/zgrep [OPTION]... [-e] PATTERN [FILE]...
Look for instances of PATTERN in the input FILEs, using their
uncompressed contents if they are compressed.

OPTIONs are the same as for 'grep'.

Ci sono alcuni altri strumenti che funzionano anche con gli archivi. Puoi eseguire il pipe out messo in grep per fare la stessa cosa.

zcat
zcat my.archive.zip | grep "some text"

Oppure puoi utilizzare la funzionalità di ricerca di questi strumenti

zless
zmore
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.