L'approccio più semplice sarebbe quello di elencare i contenuti dell'archivio e cercare i file dell'estensione pertinente. Ad esempio, con un zip
file:
$ zip -sf foo.zip | grep -iE '\.png$|\.jpg$'
file1.jpg
file1.png
file2.jpg
file2.png
L' -sf
opzione dice zip
di elencare i file contenuti in un archivio. Quindi, grep
cercherà un .png
o .jpg
che si trovano alla fine della riga ( $
). Il -E
abilitazioni esteso le espressioni regolari, in modo che possiamo usare |
come OR e la -i
rende il caso di corrispondenza insensibile.
Tuttavia, ogni strumento di archiviazione ha un comando diverso per elencare i contenuti. Ho scritto una sceneggiatura in grado di gestire la maggior parte di quelli più popolari. Se si salva lo script come list_compressed.sh
, è possibile quindi eseguire:
list_compressed.sh | grep -iE '\.png$|\.jpg$|\.jpeg$|\.gif$|\.tif$|\.tiff$'
Ciò mostrerebbe i tipi di immagine più comuni. Si noti che questo approccio presuppone che il tipo di file possa essere determinato dall'estensione del file. Non troverà i file di immagine che non hanno un'estensione e non riconoscerà i file con l'estensione errata. Non c'è modo di affrontarlo senza effettivamente estrarre i file dall'archivio e eseguirli file
su ciascuno di essi.
Se si desidera trovare tutti gli archivi che contengono file di immagine sul disco rigido, combinare quanto sopra con find
:
find / -name '*.gz' -o -name '*.tgz' -o -name '*.zip' -print0 |
while IFS= read -r -d '' arch; do
list_compressed.sh "$arch" |
grep -qiE '\.png$|\.jpg$|\.jpeg$|\.gif$|\.tif$|\.tiff$' &&
echo "$arch contains image(s)"
done
Il comando find cercherà tutti .gz
, .tgz
o .zip
file (puoi aggiungere tutte le estensioni che vuoi), che vengono poi passate attraverso il mio script. I -q
Sopprime grep è in uscita normale, niente verranno stampati. Il && echo
stamperà il nome del archivio solo se l' grep
ha avuto successo.
foo
ma nonfoo.png
.