Der einfachste Ansatz wäre, den Inhalt des Archivs aufzulisten und nach Dateien der entsprechenden Erweiterung zu suchen. Zum Beispiel mit einer zipDatei:
$ zip -sf foo.zip | grep -iE '\.png$|\.jpg$'
file1.jpg
file1.png
file2.jpg
file2.png
Die -sfOption weist zipan, die in einem Archiv enthaltenen Dateien aufzulisten. Dann grepwird nach einem .pngoder gesucht, das .jpgsich am Ende der Zeile befindet ( $). Die -Eermöglicht reguläre Ausdrücke erweitert, so dass wir verwenden können , |als OR und das -imacht die passende Groß- und Kleinschreibung.
Jedes Archivierungswerkzeug verfügt jedoch über einen anderen Befehl zum Auflisten des Inhalts. Ich habe ein Skript geschrieben , das mit den meisten der beliebtesten umgehen kann. Wenn Sie dieses Skript als speichern, list_compressed.shkönnen Sie Folgendes ausführen:
list_compressed.sh | grep -iE '\.png$|\.jpg$|\.jpeg$|\.gif$|\.tif$|\.tiff$'
Das würde Ihnen die häufigsten Bildtypen zeigen. Beachten Sie, dass bei diesem Ansatz davon ausgegangen wird, dass der Dateityp durch die Dateierweiterung bestimmt werden kann. Es werden keine Bilddateien gefunden, die keine Erweiterung haben, und es werden keine Dateien mit der falschen Erweiterung erkannt. Es gibt keine Möglichkeit, damit umzugehen, ohne die Dateien tatsächlich aus dem Archiv zu extrahieren und fileauf jeder von ihnen auszuführen.
Wenn Sie alle Archive finden möchten , die Bilddateien auf Ihrer Festplatte enthalten, kombinieren Sie Folgendes mit 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
Der Fund Befehl wird für alle suchen .gz, .tgzoder .zipDateien (Sie können so viele Erweiterungen hinzufügen , wie Sie mögen), diese werden dann durch mein Skript übergeben. Das -qunterdrückt die normale Ausgabe von grep, es wird nichts gedruckt. Der && echoName des Archivs wird nur gedruckt, wenn das greperfolgreich war.
fooaber nicht enthaltenfoo.png.