Der einfachste Ansatz wäre, den Inhalt des Archivs aufzulisten und nach Dateien der entsprechenden Erweiterung zu suchen. Zum Beispiel mit einer zip
Datei:
$ zip -sf foo.zip | grep -iE '\.png$|\.jpg$'
file1.jpg
file1.png
file2.jpg
file2.png
Die -sf
Option weist zip
an, die in einem Archiv enthaltenen Dateien aufzulisten. Dann grep
wird nach einem .png
oder gesucht, das .jpg
sich am Ende der Zeile befindet ( $
). Die -E
ermöglicht reguläre Ausdrücke erweitert, so dass wir verwenden können , |
als OR und das -i
macht 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.sh
kö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 file
auf 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
, .tgz
oder .zip
Dateien (Sie können so viele Erweiterungen hinzufügen , wie Sie mögen), diese werden dann durch mein Skript übergeben. Das -q
unterdrückt die normale Ausgabe von grep, es wird nichts gedruckt. Der && echo
Name des Archivs wird nur gedruckt, wenn das grep
erfolgreich war.
foo
aber nicht enthaltenfoo.png
.