複数のファイル形式に基づいて拡張子を追加する

複数のファイル形式に基づいて拡張子を追加する

複数のファイルに拡張子を追加することについて多くの質問があることを知っています。しかし、それらのどれも私の仕事をすることはできません。

拡張子のない巨大な画像のリストがあります。ほとんどはpngですが、jpgファイルもあり、tiffもあります。

名前を正しく変更するにはどうすればよいですか?

答え1

たぶん、次のようなものがあります。

for f in /some/dir/*; do
    type="$( file -bi -- "$f" )"
    case "${type%%;*}" in
        image/jpeg) ext=jpg ;;
        image/png)  ext=png ;;
        image/tiff) ext=tiff ;;
        *) printf '%s: %s: unknown file type\n' "${0##*/}" "$f" >&2; ext='' ;;
    esac
    if [ -n "$ext" ]; then mv -n -- "$f" "${f}.${ext}"; fi
done

答え2

別の方法exiftool

exiftool -r -ext '' '-filename<$filename.$filetype' .

これにより、現在のディレクトリで拡張子がないすべてのイメージファイルの名前が、などに再帰的にr変更されます。.filename.TYPETYPEJPEGPNGTIFF

または、拡張子のないJPEG / PNG / TIFFタイプのファイルのみを名前変更します。

exiftool -if '$filetype eq "JPEG"' -filename=%f.jpg \
-execute -if '$filetype eq "PNG"' -filename=%f.png \
-execute -if '$filetype eq "TIFF"' -filename=%f.tiff \
-common_args -r -ext '' .

答え3

これがあなたの質問に対する答えであるかどうかはわかりませんが、どの画像タイプ(PNG、JPEGなど)が特定のファイルであるかを知りたい場合は、次のコマンドを使用できますfile

file myimage.xxx

myimage.xxx: PNG image data, 837 x 814, 8-bit/color RGB, non-interlaced

関連情報