Como renomear arquivos incorretos com suas extensões apropriadas?

2

Eu tenho uma pasta com a maior parte dos arquivos em diferentes tipos, ou seja, .pdf , .jpg , .png , < em> .tiff etc., mas todos são nomeados com a extensão .JPG . Como posso renomear todos eles com suas extensões originais? ou seja, pdf para pdf , tiff para tiff e assim por diante.

Eu posso encontrar o tipo de arquivo por:

file 99.jpg
99.jpg: PDF document, version 1.3

Existe algum script ou programa com o qual eu possa fazer isso?

    
por drdree 01.06.2017 / 09:26

2 respostas

3
  1. Gere os comandos sem executá-los.

    Use mimetype para gerar uma lista de cadeias de comando, que é depois disso mexido pelo comando GNU sed substituto s :

    cd ~/messed/up/folder/  # go where the files are...
    mimetype -M --output-format 'mv "%f" "%f%m"' *.JPG |
       sed 's#\.[^./"]*/\([^./]*"\)$#\.#'
    
  2. Se algumas das extensões de arquivo parecerem um pouco mime -ish, (ou seja, .jpeg em vez de .jpg , etc.), adicione quantos comandos s necessário entre sed ' e s , por exemplo:

    sed 's/jpeg"$/jpg"/;s#\.[^./"]*/\([^./]*"\)$#\.#'
    
  3. Quando a saída estiver boa, execute isso com o GNU sed 's avaliar e opção. (Basta colocar um e antes do final ' .) Assim, a coisa toda pode parecer:

    cd ~/messed/up/folder/  # go where the files are...
    mimetype -M --output-format 'mv "%f" "%f%m"' *.JPG |
        sed 's/jpeg"$/jpg"/;s#\.[^./"]*/\([^./]*"\)$#\.#e'
    ls  # show results
    
por 01.06.2017 / 12:20
2

Você pode usar o tipo MIME encontrado por 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

Adicione mais tipos ao case se precisar (mas deixe de fora image/jpeg , pois os arquivos JPEG já têm a extensão correta). Revise as alterações e descomente a linha mv quando estiver satisfeito com os resultados.

    
por 01.06.2017 / 09:44