Я пишу сценарий оболочки, который создаст текстовый (то есть диффундирующий) дамп архива.
Я хотел бы определить, можно ли печатать каждый файл в некотором заданном наборе символов, и если он пригоден для печати, я бы хотел преобразовать в этот набор символов из любого, в котором он находится, если это возможно, и сделать его содержимое частью дампа.
Я подумал об использовании утилиты file
, но, похоже, нет никакого способа сказать ей просто напечатать кодировку символов или data
. Например:
$ file -e soft -e tokens -e tar -e apptype -e cdf -e compress -e elf -e tar config.sub
config.sub: Lisp/Scheme program text
config.sub
- это один из файлов, распространяемых с исходным кодом file
.
Я также немного опасаюсь разбирать его довольно непредсказуемый вывод.
Я бы хотел свести к минимуму зависимости для этого скрипта. Я уже использую Perl, но предпочел бы не полагаться на какие-либо пакеты Perl. Предположительно iconv
будет лучшим способом сделать преобразование, и я не против сделать это зависимостью.
С другой стороны, может быть, такая утилита, как мой зарождающийся скрипт, уже доступна?
обновление : я закончил писать это на Python. Его можно найти в его github repo или в PyPI . Текущая версия на самом деле не выполняет то, что я упомянул в этом вопросе: это оказалось слишком трудоемким и недостаточно необходимым для реализации.
Впрочем, он может перейти в более позднюю редакцию; если это так, я, скорее всего, в конечном итоге буду использовать некоторую комбинацию быстрого сканирования для двоичного обнаружения (как упомянуто в одной из цепочек комментариев) и использование модуля chardet
, как упомянуто Заком. Другим вариантом может быть использование оболочки Python для утилиты file
C, хотя я не уверен, насколько это переносимо.