Способ определения текстовых типов файлов в Bash?

656
big-o

Есть ли какая-либо альтернатива fileкоманде, которую можно использовать для определения типов файлов в незашифрованном виде, у которых нет магического числа? Например, я могу дать файл, содержащий JSON, и я получу ответ типа «JSON» вместо «ASCII text».

В противном случае, есть ли альтернативные магические файлы, которые могут заставить fileкоманду вести себя так?

0
Простые текстовые файлы не имеют различимых идентификаторов или структуры, потому что они PLAIN TEXT. :) Ƭᴇcʜιᴇ007 10 лет назад 0
@ techie007, в linux есть бинарные и текстовые файлы. Для простых текстовых файлов существуют различные форматы, которые они могут содержать (xml, html) и шаблоны, различимые для сценариев (perl, python, bash и т. Д.). Среды IDE используют эти шаблоны для цветовой кодировки строк и ключевых слов в файлах. Команда file может выявить некоторые отличия (она будет возвращать «исполняемый текст сценария оболочки POSIX» для сценария оболочки, который все еще технически является простым текстовым файлом). MaQleod 10 лет назад 1
@maQleod Нет способа идентифицировать тип файла, который не имеет распознаваемой структуры (он же «формат»), независимо от ОС. Поскольку простые текстовые файлы по своей природе не имеют определенной структуры или формата, они не могут быть распознаны как таковые. В лучшем случае все, что вы можете сделать, это исключить все другие известные структуры, а затем предположить, что файл представляет собой простой текст. Ƭᴇcʜιᴇ007 10 лет назад 3
Я не знаю ни превосходной замены "файла", ни лучшего источника магических файлов. Но, поскольку существует так много типов файлов, для которых `file` либо ненадежен, либо недостаточно детализирован, я часто заканчиваю тем, что собираю воедино собственные сценарии Python для этой цели. John1024 10 лет назад 0
Это поднимает вопрос * почему * вы хотели бы сделать это? Что именно не так с `file`? Sami Laine 10 лет назад 0

1 ответ на вопрос

0
Adrian Frühwirth

As explained by @techie007 there is no sane and efficient way to identify the "format" of a text file, but if you specifically want to test whether a file contains valid JSON you can probably use jq for this task since I guess it will return with an errorcode != 0 on invalid JSON input.

Похожие вопросы