Могу ли я использовать file
и magic
( http://linux.die.net/man/5/magic ), чтобы переопределить описание некоторых других известных форматов?
Например, я хотел бы описать следующие форматы:
- КРОВАТЬ: http://genome.ucsc.edu/FAQ/FAQformat.html#format1
- Фаста: http://en.wikipedia.org/wiki/FASTA_format
- ...
это просто текстовый файл
Или
это просто файл gzipped, начинающийся с магического номера BAM\1
?
ты знаешь какой-нибудь пример?
Можно ли предоставить собственный код C для тестирования файла вместо использования магического формата?
Ответы:
Вы можете использовать эту
-m
опцию, чтобы указать альтернативный список магических файлов, и если вы включите свой собственный файл/usr/share/file/magic.mgc
в этот список до скомпилированного магического файла ( в моей системе), эти шаблоны будут проверены перед «глобальными». Вы можете создать функцию или псевдоним, чтобы всегда прозрачно использовать эту опцию, просто введяfile
команду.Язык, используемый в магическом файле, достаточно мощный, поэтому редко возникает необходимость вернуться к пользовательскому кодированию на Си. Единственный раз, когда я чувствовал склонность сделать это, было в 90-х годах, когда сопоставление файлов HTML и XML было трудным, потому что не было никакого способа (в то время) иметь гибкое сопоставление регистров и смещений, необходимое для возможности анализа
<HTML
и< Html
и< html
с одним шаблоном , Я реализовал это в C как модификатор шаблона 'string', позволяющий игнорировать регистр и сжимать (необязательные) пробелы .Эти изменения в C также потребовали адаптации магических файлов . И если с тех пор
file
исходный код значительно не изменился, вам всегда нужно будет изменять (или предоставлять дополнительные) правила вmagic
файлах, соответствующих этим изменениям кода C. Таким образом, вы могли бы также начать пытаться делать это с изменениями только в волшебных файлах и вернуться к изменению кода C, если это действительно не сработает.источник
Для следующего пользователя $ (user_searchengine), который найдет это:
Простые правила, такие как BAM, выглядят так:
OFFSET TYPE [OPERAND]FLAG MESSAGE
В случае BAM:
0 string BAM\1 BAM
при поиске заголовка будет напечатана строка BAM.
Для получения дополнительной информации эта информация о сайтах IBM выглядит несколько устаревшей, но ее все же должно быть достаточно для простых случаев использования. У человека также есть куча информации о формате.
источник
Вам не нужно всегда использовать эту
-m
опцию; так как documentmentend на его man-страницеfile(1)
будет по умолчанию читать~/.magic
файл (или его скомпилированную версию:)~/.magic.mgc
, чтобы вы могли добавить свои определения туда; не нужно связываться с общесистемной/usr/share/magic*
или/etc/magic
.источник