如何使用脚本根据 mimetype 重命名文件/更改其扩展名?

如何使用脚本根据 mimetype 重命名文件/更改其扩展名?

我希望有人能向我解释如何更改文件类型。我最近将照片上传到笔记本电脑上,其中一半保存为文件而不是图像,这意味着我无法将它们上传到网站上进行打印。

我正在寻找分步流程,以及我是否可以同时完成所有操作或单独完成它们。我有 500 多个要更改。

答案1

您应该能够使用该mimetype实用程序 - 来自man mimetype

NAME
       mimetype - Determine file type

SYNOPSIS
       mimetype [options] [-] files

DESCRIPTION
       This script tries to determine the mime type of a file using the Shared
       MIME-info database. It is intended as a kind of file(1) work-alike, but
       uses mimetypes instead of descriptions.

例如:

$ mimetype somefile
somefile: image/jpeg

但是,默认情况下,mimetype如果存在扩展,则会“相信”该扩展 - 因此:

$ cp somefile somefile.gif
$ mimetype somefile.gif
somefile.gif: image/gif

你可以告诉它只使用文件的魔法字节通过添加开关来进行测定-M

$ mimetype -M somefile.gif
somefile.gif: image/jpeg

您还可以添加-b描述brief

$ mimetype -bM somefile.gif
image/jpeg

如果你想脚本重命名,我建议如下:

#!/bin/bash

while read -r -d '' f; do
  mt="$(mimetype -bM "$f")"
  ext="${mt##*/}"
  case "$ext" in
    jpeg|gif|png)
      echo mv -v "$f" "$f.$ext"
      ;;
    *)
    echo "skipping mimetype $mt... "
      ;;
  esac
done < <(find -type f -print0)

笔记:

  1. 它实际上并没有重命名任何内容:echo mv只是输出它所请检查并再次检查它是否按预期运行你的删除之前的文件echo
  2. 它仅对 、 和 文件进行操作jpeggif如果png还有其他图像类型,则需要明确添加这些类型
  3. 它将重命名(添加额外的扩展名)任何它认为具有错误的基于魔法字节的扩展

可能还有其他更简单的选项,例如使用exiftool

相关内容