如何使用适当的扩展名重命名错误的文件?

如何使用适当的扩展名重命名错误的文件?

我有一个文件夹,其中包含大量不同类型的文件,即.pdf,.jpg,.png,.tiff等等,但都以扩展名命名.JPG。我怎样才能用它们原来的扩展名重命名它们呢? IEpdfpdf,蒂夫蒂夫等等。

我可以通过以下方式找到文件类型:

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/jpeg,因为 JPEG 文件已经具有正确的扩展名)。检查更改,然后mv在对结果满意时取消注释该行。

答案2

  1. 生成命令没有运行它们。

    用于mimetype生成命令字符串列表,然后通过以下命令对其进行调整GNU 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. 一旦输出看起来不错,就可以使用GNU sed评价 e选项。 (只需在e最后一个前面加上一个'即可。)所以整个事情可能看起来像:

    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
    

相关内容