ファイルコマンドの便利な代替

ファイルコマンドの便利な代替

ファイルがASCII(テキスト)か他の形式かを確認するために、次のシェル構文を使用します(以前の質問から、phemientが回答)。

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

問題は、test_file が ASCII ファイルであっても、「ファイルに非 ASCII 文字が含まれています」(シェル スクリプト構文から) というメッセージが表示されることです。なぜでしょうか?

また、fileコマンドでファイルをテストすると、次のようになります。

file test_file 
Non-ISO extended-ASCII English text" its also ASCII file 

質問: 「非 ISO 拡張 ASCII 英語テキスト」もサポートするためにシェル構文を変更するにはどうすればよいでしょうか?

シェルスクリプトから「ファイルにはASCII文字のみが含まれています」という出力が得られます

  remark the solution must be for Linux and solaris

THX

答え1

こんにちは、私は次のようなものを使います:

#!/bin/bash
if [[ `file -b $1` == "ASCII text" ]] ; then
   echo "file contains ascii characters only"
   else
     echo "file contains non-ascii characters"
fi

次のようになります:

$ filetest.sh 1.txt  
file contains ascii characters only
$ filetest.sh PHOTOS/HPIM0532.jpg  
file contains non-ascii characters

関連情報