
ファイルコマンドを使用して、多くのファイルが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/
。