Atualmente estou usando o seguinte comando:
file image.jpg | cut -d " " -f 2
Até agora tudo bem. Também funciona em um arquivo sem extensão de imagem. Então, eu queria saber se existe outra maneira de fazer isso? Talvez eu não tenha visto um determinado caso em que o código acima falharia.
Editar: estou tentando criar um script para renomear os arquivos de imagem em um diretório sequencialmente.
Responder1
O projeto ImageMagick possui facilidades para identificação de imagens.
Estou usando o ImageMagick o tempo todo, incluindo seu recurso "identificar" na linha de comando e ele nunca falhou em identificar uma imagem.
Observe que dá muito mais do que apenas o formato, por exemplo:
$ identify tmp3.jpg
tmp3.jpg JPEG 1680x1050 1680x1050+0+0 DirectClass 8-bit 293.582kb
$ identify tmp.png
tmp.png PNG 1012x900 1012x900+0+0 DirectClass 8-bit 475.119kb
Responder2
Usar file
é um método confiável para identificar tipos de arquivos. Não depende de extensões de arquivo, mas sim de “números mágicos”; o início do conteúdo do arquivo.
Para tornar seu processo mais robusto você pode usar libmagic
diretamente. Dessa forma, se por algum motivo o formato da file
saída do for alterado, isso não afetará você. No entanto, isso significa que você precisará escrever seu script em uma linguagem que possa chamar funções em uma biblioteca C.
Responder3
Você já acertou o comando, pois tudo o que ele faz é avaliar o tipo MIME por meio do arquivo libmagic
. Seu único propósito é reconhecertipos de arquivocompadrõesdada pelo respectivoformato de arquivo. Então você não encontrará nada melhor. Você pode até adicionar extensões próprias para arquivos, que não são reconhecidos corretamente. (para magia, não o arquivo de comando)