Ich habe einen Ordner mit dem Großteil der Dateien darin von verschiedenen Typen, d.h..pdf,.jpg,.png,.tiffusw., aber alle haben die Erweiterung.JPG. Wie kann ich sie alle mit ihren ursprünglichen Erweiterungen umbenennen? iepdfZupdf,tiffZutiffund so weiter.
Ich kann den Dateityp folgendermaßen finden:
file 99.jpg
99.jpg: PDF document, version 1.3
Gibt es ein Skript oder Programm, mit dem ich dies tun kann?
Antwort1
Sie können den MIME-Typ verwenden, der wie folgt gefunden wurde file
:
#! /usr/bin/env bash
for f in ./*.JPG; do
type=$(file -bi "$f")
type=${type%%;*}
base=${f%.*}
final=
case "$type" in
application/pdf) final="$base".pdf ;;
image/png) final="$base".png ;;
image/tiff) final="$base".tiff ;;
esac
if [ "$final" ]; then
printf '%s --> %s\n' "$f" "$final"
# mv -f "$f" "$final"
fi
done
case
Fügen Sie bei Bedarf weitere Typen hinzu (aber lassen Sie weg image/jpeg
, da JPEG-Dateien bereits die richtige Erweiterung haben). Überprüfen Sie die Änderungen und heben Sie die Kommentierung der mv
Zeile auf, wenn Sie mit den Ergebnissen zufrieden sind.
Antwort2
Generieren Sie die Befehleohnesie ausführen.
Verwenden Sie diese Option
mimetype
, um eine Liste von Befehlszeichenfolgen zu generieren, die anschließend angepasst wird durchGNUsed
'SErsatzs
Befehl:cd ~/messed/up/folder/ # go where the files are... mimetype -M --output-format 'mv "%f" "%f%m"' *.JPG | sed 's#\.[^./"]*/\([^./]*"\)$#\.\1#'
Wenn einige der Dateierweiterungen ein wenig zuMime-ish, (also
.jpeg
statt.jpg
, usw.), und fügen Sie dann zwischen und so vieles
Befehle wie nötig hinzu , zum Beispiel:sed '
s
sed 's/jpeg"$/jpg"/;s#\.[^./"]*/\([^./]*"\)$#\.\1#'
Sobald die Ausgabe gut aussieht, führen Sie sie mit demGNU
sed
'S auswertene
Option. (Setzen Sie einfach eine
vor das letzte'
.) Das Ganze könnte dann so aussehen:cd ~/messed/up/folder/ # go where the files are... mimetype -M --output-format 'mv "%f" "%f%m"' *.JPG | sed 's/jpeg"$/jpg"/;s#\.[^./"]*/\([^./]*"\)$#\.\1#e' ls # show results