シェルスクリプトのファイルコマンドでASCIIファイルを検証する

シェルスクリプトのファイルコマンドでASCIIファイルを検証する

ファイルコマンドを使用して、多くのファイルがASCII形式か他の形式か確認する必要があります

時々、ファイルコマンドから次の情報を取得します:

  file1: ASCII English text

そして時々ファイルコマンドから異なる答えが返ってくる

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

異なる構文の他の回答があるかどうかは本当にわかりません

私の質問は次のとおりです:

ファイルがASCIIであるかどうかを確認するために次のksh構文を記述しましたが、

次の構文は、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

出力をコードで解析しているので、-iオプションをオンにしてfile出力することをお勧めします。マイム人間が理解しやすい文字列ではなく、型を使用します。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/

関連情報