Eu tenho uma pasta com a maior parte dos arquivos de diferentes tipos, ou seja.pdf,.jpg,.png,.tiffetc., mas todos são nomeados com a extensão.JPG. Como posso renomear todos eles com suas extensões originais? ou sejapdfparapdf,brigaparabrigae assim por diante.
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?
Responder1
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 necessário (mas deixe de fora image/jpeg
, pois os arquivos JPEG já possuem a extensão correta). Revise as alterações e remova o comentário da mv
linha quando estiver satisfeito com os resultados.
Responder2
Gere os comandossemexecutá-los.
Use
mimetype
para gerar uma lista de strings de comando, que é posteriormente ajustada porGNUsed
desubstitutos
comando:cd ~/messed/up/folder/ # go where the files are... mimetype -M --output-format 'mv "%f" "%f%m"' *.JPG | sed 's#\.[^./"]*/\([^./]*"\)$#\.\1#'
Se algumas das extensões de arquivo parecerem um pouco demaismímica-ish, (ou seja,
.jpeg
em vez de.jpg
, etc.) e adicione quantoss
comandos forem necessários entresed '
es
, por exemplo:sed 's/jpeg"$/jpg"/;s#\.[^./"]*/\([^./]*"\)$#\.\1#'
Quando a saída parecer boa, execute-a com oGNU
sed
de Avaliee
opção. (Basta colocar ume
antes do final'
.) Então 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#\.[^./"]*/\([^./]*"\)$#\.\1#e' ls # show results