5

С помощью команды file мне нужно проверить много файлов, если они ASCII или другой формат

Иногда я получаю из файла команду:

  file1: ASCII English text

И иногда я получаю другой ответ от команды файла

  file2: Non-ISO extended-ASCII English text, with very long lines

Я действительно не уверен, есть ли другие ответы с другим синтаксисом

Мой вопрос:

Я пишу следующий синтаксис ksh, чтобы проверить, является ли файл ASCII, но я не уверен, что

следующий синтаксис является оптимальным синтаксисом для проверки формата ASCII?

   [[ ` file  $some_file | grep –c ASCII ` = 1 ]] && print "you have ascii file for sure"

Если у кого-то есть другие предложения, чтобы проверить формат ASCII точно, я буду очень рад видеть это

3 ответа3

8
if LC_ALL=C grep -q '[^[:print:][:space:]]' file; then
    echo "file contains non-ascii characters"
else
    echo "file contains ascii characters only"
fi
1

Как насчет...

if file -ib "$file" | grep -Eqs '^text/plain(;|$)'; then
    echo "It's text/plain."
fi

Я не знаю, насколько распространен --mime-type ; если это стандартно, используйте

if file -b --mime-type "$file" | grep -qs '^text/plain$'; then

В качестве альтернативы grep -qs '^text/' для любого типа текста.

0

Поскольку вы анализируете вывод с помощью кода, я бы предложил использовать параметр -i для file чтобы он выводил типы MIME вместо строк, удобных для человека. Вывод MIME-типа является более регулярным, и это немного облегчает работу с кодом.

Что касается типов вывода, посмотрите на файл man говорит, что:

/usr/share/file/magic
    Default list of magic numbers

/usr/share/file/magic.mime
    Default list of magic numbers, used to output  mime types
    when the -i option is specified.

Взгляните на эти файлы для всех типов MIME, о которых он может сообщить, чтобы определить, какие типы вам понадобятся при разборе вывода из file . Я подозреваю, что вам все равно, что MIME-тип начинается с text/ .

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .