Teste para um formato de arquivo específico

3

Este é um acompanhamento para Arquivo de texto com aparência normal, detectado pelo arquivo como texto do programa ASCII Pascal

Parece que file não é confiável o tempo todo.

Parece possível que um determinado arquivo seja detectado como tendo encoding/format1 e encoding/format2 . file me diz que é encoding/format1 , mas preciso verificar se também satisfaz as restrições de encoding/format2 .

  • Existe uma maneira de fazer isso?
  • Existe uma maneira de perguntar "Verifique se esse arquivo segue as regras de ASCII English Text (ou alguma outra codificação ) "e a resposta será "sim" ou "não"?
por user13107 02.07.2014 / 13:54

2 respostas

4

Talvez você possa usar a opção --keep-going ( -k ) de file . Escreve mais formatos correspondentes.

Página relacionada man page desta opção:

Don't stop at the first match, keep going. Subsequent matches will be have the string ‘2- ’ prepended. (If you want a newline, see the -r option.) The magic pattern with the highest strength (see the -l option) comes first.

    
por 02.07.2014 / 14:01
0

Respondendo apenas à sua segunda pergunta, como o jofel já respondeu ao primeiro .

  • Is there a way I can ask "Check if this file follows the rules of ASCII English Text (or some other encoding)" and the answer will be "yes" or "no"?

Veja a opção -e / --exclude . De file(1) :

-e, --exclude testname

Exclude the test named in testname from the list of tests made to determine the file type.

[...]

  • soft Consults magic files

Esses arquivos mágicos são responsáveis pelo relatório Pascal, então -e soft deve ser suficiente. Você pode tentar excluir outros testes dessa lista também, desde que você deixe ascii ativado.

Para o seu teste "sim / não", combine com -b ("breve", isto é, sem o nome do arquivo) e --mime-encoding , para produzir somente a codificação. Então é uma comparação simples de string:

if [ "$(file -b --mime-encoding -e soft $file)" == "us-ascii" ] ; then
  echo yes
else
  echo no
fi
    
por 29.07.2016 / 14:18