間違ったファイルの名前を適切な拡張子に変更するにはどうすればよいですか?

間違ったファイルの名前を適切な拡張子に変更するにはどうすればよいですか?

さまざまな種類のファイルを含むフォルダがあります。.pdf.jpg.pngマイナーな争いなどですが、すべて拡張子と呼ばれています。.JPG。元の拡張子に名前を変更するにはどうすればよいですか?つまりPDF到着PDF些細な口論到着些細な口論など。

以下のファイル形式を見つけることができます。

file 99.jpg
99.jpg: PDF document, version 1.3

これを行うために使用できるスクリプトまたはプログラムはありますか?

答え1

以下で見つけたMIMEタイプを使用できます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必要に応じてより多くのタイプを追加できます(ただし、image/jpegJPEGファイルにはすでに正しい拡張子があるため省略されています)。変更を確認し、mv結果に満足したら、その行のコメントを外してください。

答え2

  1. ビルドコマンドいいえ実行してください。

    mimetypeコマンド文字列のリストを生成し、次の方法で調整するために使用されます。牛に似た一種の栄養 sed~の変える s注文する:

    cd ~/messed/up/folder/  # go where the files are...
    mimetype -M --output-format 'mv "%f" "%f%m"' *.JPG |
       sed 's#\.[^./"]*/\([^./]*"\)$#\.\1#'
    
  2. 一部のファイル拡張子が少し見えすぎる場合ジェスチャー広大極-ish、(例:などの代わりに)次に、そして間に.jpeg必要.jpgな数のコマンドを追加しますs。たとえば、次のようになります。sed 's

    sed 's/jpeg"$/jpg"/;s#\.[^./"]*/\([^./]*"\)$#\.\1#'
    
  3. 出力が良くなったら、次のものを使用できます。牛に似た一種の栄養 sed~の 評価する eオプション。 (e最後の項目の前に1つを追加するだけです'。)全体の内容は次のとおりです。

    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
    

関連情報