web-dev-qa-db-ja.com

Linuxで画像ファイル拡張子を再帰的に修正する

Linuxユーザーのために修正する必要がある誤った名前のスキャン/ファックスからの画像ファイルがたくさんあります。 * .jpgとラベル付けされたPNGファイルであるスキャンがたくさんあることがわかりました。 Windowsでは、Explorer/Officeが拡張機能を無視するため、これが問題になることはありませんでした。しかし、Linuxでは、Eye of GNOMEなどは、内容が拡張子と一致しないため、ファイルを開くことを拒否するだけになります。

誰かがこれを行うことができるツールまたはスクリプトの小さな部分について何か推奨事項がありますか?これを行うためのCプログラムを書くことはできますが、それは少しやり過ぎのようです。座って手動で名前を変更することはできません。何千もあります。

編集:fileコマンドがファイルの実際の内容を調べて、それが何であるかを表示するのがわかります。しかし、そこからの情報をどのように使用するかはよくわかりません。

5
BlamKiwi

画像ファイルのように見えるファイルを繰り返し処理し、fileを呼び出して実際のファイルを確認してから、適切な名前に変更します。

for f in *.{jpg,JPG,png,PNG,jpeg,JPEG}; do 
    type=$( file "$f" | grep -oP '\w+(?= image data)' )
    case $type in  
        PNG)  newext=png ;; 
        JPEG) newext=jpg ;; 
        *)    echo "??? what is this: $f"; continue ;; 
    esac
    ext=${f##*.}   # remove everything up to and including the last dot
    if [[ $ext != $newext ]]; then
        # remove "echo" if you're satisfied it's working
        echo mv "$f" "${f%.*}.$newext"
    fi
done
9
glenn jackman