Posso usar file
e magic
( http://linux.die.net/man/5/magic ) para substituir a descrição de alguns outros formatos conhecidos?
por exemplo, gostaria de descrever os seguintes formatos:
- Cama: http://genome.ucsc.edu/FAQ/FAQformat.html#format1
- Fasta: http://en.wikipedia.org/wiki/FASTA_format
- ...
que são 'apenas' arquivo de texto
Ou
que é 'apenas' um arquivo compactado com gzip começando com o número mágico BAM\1
?
você conhece algum exemplo?
É possível fornecer um código C personalizado para testar o arquivo em vez de usar o formato mágico?
file-format
file-command
Pierre
fonte
fonte
Respostas:
Você pode usar a
-m
opção para especificar uma lista alternativa de arquivos mágicos e, se você incluir o seu antes do arquivo mágico compilado (/usr/share/file/magic.mgc
no meu sistema) nessa lista, esses padrões serão testados antes dos "globais". Você pode criar uma função, ou um alias, para sempre usar sempre essa opção de forma transparente, apenas emitindo ofile
comandoA linguagem usada no arquivo mágico é bastante poderosa, portanto, raramente é necessário reverter para a codificação C personalizada. A única vez que eu me senti inclinado a fazê-lo foi na década de 90, quando correspondentes arquivos HTML e XML foi difícil porque não havia nenhuma maneira (na época) para ter o invólucro flexível e compensar correspondência necessária para ser capaz de analisar
<HTML
e< Html
e< html
com um padrão . Eu implementei isso em C como modificador do padrão 'string', permitindo ignorar maiúsculas e minúsculas e compactar espaços em branco (opcionais) .Essas mudanças em C também exigiram a adaptação dos arquivos mágicos . E, a menos que o
file
código-fonte tenha sido alterado significativamente desde então, você sempre precisará modificar (ou fornecer) regras extras nosmagic
arquivos que correspondem às alterações no código C. Portanto, você pode começar a tentar fazer isso apenas com alterações nos arquivos mágicos e voltar a mudar o código C, se isso realmente não der certo.fonte
Para o próximo usuário $ (user_searchengine), localize isso:
Regras simples como a BAM são assim:
OFFSET TYPE [OPERAND]FLAG MESSAGE
No caso de BAM:
0 string BAM\1 BAM
Isso imprimiria a string BAM ao encontrar o cabeçalho.
Para obter mais informações, essas informações dos sites IBM parecem um pouco desatualizadas, mas ainda devem ser suficientes para casos de uso simples. O homem também tem um monte de informações sobre o formato.
fonte
Você não precisa sempre usar a
-m
opção; como o documento em sua página de manualfile(1)
também lerá por padrão o~/.magic
arquivo (ou uma versão compilada dele~/.magic.mgc
:), para que você possa adicionar suas definições; não há necessidade de mexer com o sistema/usr/share/magic*
ou/etc/magic
.fonte