Wie kann ich zuverlässig feststellen, ob es sich bei einer Datei um eine Bilddatei handelt?

Wie kann ich zuverlässig feststellen, ob es sich bei einer Datei um eine Bilddatei handelt?

Derzeit verwende ich den folgenden Befehl:

file image.jpg | cut -d " " -f 2

So weit, so gut. Es funktioniert auch mit einer Datei ohne Bilderweiterung. Ich habe mich also gefragt, ob es eine andere Möglichkeit gibt, dies zu tun. Ich habe möglicherweise einen bestimmten Fall übersehen, in dem der obige Code fehlschlagen würde.

Bearbeiten: Ich versuche, ein Skript zu erstellen, um die Bilddateien in einem Verzeichnis sequentiell umzubenennen.

Antwort1

Das ImageMagick-Projekt verfügt über Funktionen zur Bildidentifizierung.

Ich verwende ImageMagick ständig, einschließlich der Funktion „Identifizieren“ über die Befehlszeile, und es hat noch nie ein Bild nicht identifiziert.

Beachten Sie, dass es viel mehr als nur das Format angibt, zum Beispiel:

$  identify tmp3.jpg 
tmp3.jpg JPEG 1680x1050 1680x1050+0+0 DirectClass 8-bit 293.582kb 

$  identify tmp.png
tmp.png PNG 1012x900 1012x900+0+0 DirectClass 8-bit 475.119kb

Antwort2

Die Verwendung von fileist eine zuverlässige Methode zum Identifizieren von Dateitypen. Dabei werden keine Dateierweiterungen verwendet, sondern „magische Zahlen“; der Anfang des Dateiinhalts.

Um Ihren Prozess robuster zu machen, können Sie libmagicdirekt verwenden. Wenn sich dann aus irgendeinem Grund das Format der fileAusgabe ändert, hat das keine Auswirkungen auf Sie. Das bedeutet jedoch, dass Sie Ihr Skript in einer Sprache schreiben müssen, die Funktionen in einer C-Bibliothek aufrufen kann.

Antwort3

Sie haben bereits den richtigen Befehl, da er lediglich den MIME-Typ über die auswertet libmagic. Sein einziger Zweck besteht darin, zu erkennenDatentypenmitMustergegeben durch die jeweiligenDatei Format. Also etwas besseres wirst du nicht finden. Du kannst sogar eigene Erweiterungen für Dateien hinzufügen, die nicht richtig erkannt werden. (für Magick, nicht für die Kommandodatei)

verwandte Informationen