根据多个文件的类型添加扩展名

根据多个文件的类型添加扩展名

我知道有关向多个文件添加扩展名存在很多问题。但他们都无法完成我的工作。

我有一个巨大的没有扩展名的图像列表,其中大多数是 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

相关内容