Ich habe ungefähr 12000 Bilder von verschiedenen Dateitypen, aber jeder von ihnen wurde in * .jpg umbenannt.
Jetzt möchte ich ihnen ihre richtigen Erweiterungen zurückgeben, wie kann ich das tun?
files
file-format
akabhirav
quelle
quelle
Antworten:
Mit bash geht das relativ einfach:
Dies ist die gleiche Idee wie bei der Antwort von @ AB, aber stattdessen werden Shell-Globs verwendet
find
. Das${f%%.*}
ist der Dateiname ohne Erweiterung. Mit-0
demfile
Befehl of wird\0
nach dem Dateinamen ein Ausdruck erstellt, den wir dann fürgrep
den Dateityp verwenden. Dies sollte mit beliebigen Dateinamen funktionieren, einschließlich solcher, die Leerzeichen, Zeilenumbrüche oder andere Elemente enthalten. Dies${type,,}
ist ein Trick, um Erweiterungen in Kleinbuchstaben zu erhalten. Es würde konvertierenPNG
zupng
.Sie haben es in Ihrer Frage nicht gesagt, aber wenn Sie möchten, dass dies rekursiv ist und in Unterverzeichnisse abfällt, können Sie stattdessen Folgendes verwenden:
Das
shopt -s globstar
wird bash globstar Option aktivieren , die lässt**
Spiel Verzeichnisse:quelle
**
das Wiederauffinden von Unterverzeichnissen.file
nicht immer die angegebene Erweiterung angegeben wird: Es wird zum Beispiel eine Bash-Datei in diese Datei umgewandeltfoo.bourne-again
!Das folgende Skript kann verwendet werden, um eine falsch festgelegte Erweiterung (rekursiv)
.jpg
in die richtige Erweiterung umzubenennen . Falls eine nicht lesbare Datei gefunden wird, wird dies in der Ausgabe des Skripts gemeldet.Das Skript das verwendet
imghdr
Modul, die folgenden Arten erkennen:rgb
,gif
,pbm
,pgm
,ppm
,tiff
,rast
,xbm
,jpeg
,bmp
,png
. Mehr zumimghdr
Modul hier . Die Liste kann, wie im Link erwähnt, um weitere Typen erweitert werden.Wie es ist, benennt es Dateien mit der Erweiterung
.jpg
, wie in der Frage erwähnt , speziell um. Mit einer geringfügigen Änderung kann eine Erweiterung oder ein bestimmter Satz von Erweiterungen in die richtige Erweiterung (oder ohne Erweiterung, wie hier ) umbenannt werden.Das Drehbuch:
Wie benutzt man
rename.py
Führen Sie es mit folgendem Befehl aus:
quelle
Hinweis: Mein Ansatz scheint zu komplex zu sein. Ich würde es vorziehen, wenn Terdons an Ihrer Stelle antworten.
Mit dem Befehl können Sie
file
den Dateityp bestimmen:Mit diesen Informationen können die Dateien umbenannt werden:
Bitte führen Sie einen Test durch, bevor Sie den Befehl auf Ihre Bilder anwenden
Beispiel
quelle
find -exec bash -c "..."
alles, was darin enthalten ist, oder verwenden Siewhile read -d '' name type
, um den Dateinamen und diefile
Ausgabe zu teilen und dann zu analysieren$type
, um den Dateityp zu ermitteln. Das ist es nicht wirklich wert, siehe meine Antwort, wie man es viel einfacher in reinem (ish) bash macht.