ファイルがテキストファイルかどうかはどうすればわかりますか?

ファイルがテキストファイルかどうかはどうすればわかりますか?

すでに持っている二つ 質問このトピックについてはここで説明しますが、どちらも実際のタイトルではないスクリプトのエラーを解決します。

ファイルの種類に応じて、ファイルに関する基本情報を取得するプログラムを開発したいと思います。ディレクトリ、テキスト、バイナリデータを区別したい。

これまで私は以下を使用していますfile

case "$(file --dereference $arg)" in
  *directory) ls -l --color=auto --almost-all --human-readable --group-directories-first --file-type --dereference-command-line "$@";;
  *text*|*JSON*) bat --style header "$@";;
esac

これはほとんど機能しますが、ご覧のように例外を追加する必要がありました。JSON次のようにfile識別されます。JSONデータ言及されていないテキスト。問題は、より多くの例外があり、それを個別に追加したくないことです。

fileコンテンツタイプに関するより一般的な情報を他の標準プログラムから取得する方法はありますか?

ベストアンサー1

いくつかの努力の終わりに、私は良い解決策を見つけました。

case "$(file --dereference --mime $arg)" in
 *inode/directory*) ls -l --color=auto --almost-all --human-readable --group-directories-first --file-type --dereference-command-line "$@";;
 *binary) ;;
 *) bat --style header "$@";;
esac

これは本質的に方法を逆にします。file --mimeつまり、文字セットを出力します。バイナリテキスト以外のすべてのファイルについて。そうすれば、そうでないすべてを処理します。バイナリテキストではうまくいくようです。

ディレクトリに興味がない場合は、バイナリファイルとしても分類されるので、次のものを使用できます。

case "$(file --dereference --mime $arg)" in
 *binary) echo "$arg is not text";;
 *) echo "$arg is text";;
esac

おすすめ記事