Wie benenne ich falsch benannte Dateien mit den entsprechenden Erweiterungen um?

Wie benenne ich falsch benannte Dateien mit den entsprechenden Erweiterungen um?

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

caseFü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 mvZeile auf, wenn Sie mit den Ergebnissen zufrieden sind.

Antwort2

  1. Generieren Sie die Befehleohnesie ausführen.

    Verwenden Sie diese Option mimetype, um eine Liste von Befehlszeichenfolgen zu generieren, die anschließend angepasst wird durchGNU sed'SErsatz sBefehl:

    cd ~/messed/up/folder/  # go where the files are...
    mimetype -M --output-format 'mv "%f" "%f%m"' *.JPG |
       sed 's#\.[^./"]*/\([^./]*"\)$#\.\1#'
    
  2. Wenn einige der Dateierweiterungen ein wenig zuMime-ish, (also .jpegstatt .jpg, usw.), und fügen Sie dann zwischen und so viele sBefehle wie nötig hinzu , zum Beispiel:sed 's

    sed 's/jpeg"$/jpg"/;s#\.[^./"]*/\([^./]*"\)$#\.\1#'
    
  3. Sobald die Ausgabe gut aussieht, führen Sie sie mit demGNU sed'S auswerten eOption. (Setzen Sie einfach ein evor 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
    

verwandte Informationen