проверить файл ASCII с помощью команды file из скрипта оболочки

проверить файл ASCII с помощью команды file из скрипта оболочки

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

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

  file1: ASCII English text

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

  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 наверняка!, я буду очень рад это увидеть.

решение1

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

решение2

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

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/'для любого типа текста.

решение3

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

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

/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/.

Связанный контент