Правильный способ дифференцировать PST и DBX файлы в Баш оболочки - PullRequest
0 голосов
/ 01 февраля 2011

Я хочу определить формат файла входного файла, заданного моим сценарием оболочки - будь то файл .pst или .dbx. Я проверил Как проверить расширение имени файла в скрипте bash? . Тот имеет дело с txt файлами и там даны два метода -

  • проверить, является ли расширение txt
  • проверьте, является ли тип пантомимы application/text и т. Д.

    Я попытался file -ib <filename> на .pst и .dbx файле, и он показал application/octet-stream для обоих. Однако, если я просто сделаю file <filename>, я получу

это для файла dbx -

file1.dbx: Microsoft Outlook Express DBX File Message database  

и это для файла pst -

file2.pst: Microsoft Outlook binary email folder (Outlook >=2003)

Итак, мои вопросы -

  • лучше ли использовать обнаружение типа пантомимы каждый раз, когда на выходе может быть что угодно, и нам нужна правильная проверка?

  • Как применить проверку типа MIME в этом случае - оба возвращают "application / octet-stream"?

Обновление
Я не хотел делать обнаружение на основе расширений, потому что кажется, что мы просто не можем быть уверены в системе Unix, что файл .dbx действительно является файлом dbx. Поскольку file <filename> возвращает строку, которая содержит правильную информацию о файле (например, «База данных сообщений о файлах Microsoft Outlook Express DBX»). Это означает, что команда file способна правильно определить тип файла. Тогда почему он не получает правильную информацию в команде file -ib <filename>?
Будет ли в порядке синтаксический анализ строки file <filename>? Целесообразно ли предположить, что мне нужно только определить узкий набор файлов для хранения данных семейства outlook (MS Outlook Express, MS Office Outlook 2003, 2007, 2010 и т. Д.). Небольшой текстовый идентификатор, такой как application/dbx, который можно сравнить, - это все, что мне нужно.

1 Ответ

3 голосов
/ 01 февраля 2011

Команда file основана на наличии базы данных обнаружения типов файлов, которая включает в себя правила для типов файлов, с которыми вы ожидаете столкнуться.Возможно, будет невозможно распознать эти типы файлов, если содержимое файла не имеет уникального кода в начале файла.

Обратите внимание, что опция -i для испускания типов MIME фактически использует отдельную "магию""файл чисел для распознавания типов файлов, а не для перевода длинных описаний в типы файлов.Эти две базы данных могут быть не синхронизированы.Если вашему приложению действительно необходимо распознавать эти два типа файлов, я предлагаю вам взглянуть на исходный код Linux для «файла», чтобы увидеть, как они их распознают, а затем кодировать этот алгоритм распознавания прямо в ваше приложение.хотите сделать эквивалент DOS определения типа файла, затем убрать расширение из имени файла (все после последнего периода) и найти эту строку в своей собственной таблице, где вы определяете нужные вам типы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...