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 file
ist 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 libmagic
direkt verwenden. Wenn sich dann aus irgendeinem Grund das Format der file
Ausgabe ä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)