如何使用適當的副檔名重命名錯誤的檔案?

如何使用適當的副檔名重命名錯誤的檔案?

我有一個資料夾,其中包含大量不同類型的文件,即.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
    

相關內容