Você deve conseguir usar o utilitário mimetype
- de 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.
Então, por exemplo:
$ mimetype somefile
somefile: image/jpeg
No entanto, por padrão, mimetype
"acreditará" na extensão, se presente - assim:
$ cp somefile somefile.gif
$ mimetype somefile.gif
somefile.gif: image/gif
Você pode dizer para usar somente magic bytes para fazer a determinação adicionando a opção -M
:
$ mimetype -M somefile.gif
somefile.gif: image/jpeg
e você pode adicionar -b
para fornecer uma brief
description:
$ mimetype -bM somefile.gif
image/jpeg
Se você quisesse script renomear, eu sugeriria algo assim:
#!/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)
NOTAS:
- ele realmente não renomeia nada como está escrito: o
echo mv
apenas exibe o que faria - verifique e verifique se ele está se comportando como esperado em seu arquivos antes de remover oecho
- ele só funciona nos arquivos
jpeg
,gif
epng
: se houver outros tipos de imagem, você precisará adicioná-los explicitamente - renomeará (adicionará uma extensão adicional a) qualquer arquivo que considere ter a extensão errada , com base em bytes mágicos
Pode haver outras opções - mais fáceis - usando ferramentas como exiftool