概要
Linux/Unix 系 OS で広く利用されている file コマンドは、ファイルの種類(MIME タイプや文字コードなど)を判別するためのツールです。ファイルの拡張子だけでなく、実際のバイト列を解析して正確に分類します。
主なオプション
- -b:ファイル名だけを出力し、説明文の先頭にある「filename:」を省略する。
- -i:MIME タイプのみを出力する。
- -L:シンボリックリンクをたどって実体ファイルを判定する。
- -s:空ファイルでも判定結果を出力する。
- -f filelist:判定対象のファイル名をリストファイルから読み込む。
基本的な使用例
単一ファイルの判定
file example.txt
出力例:
example.txt: ASCII text
複数ファイルをまとめて判定
file *.png *.jpg
各ファイルの MIME タイプや画像フォーマットが一覧で表示されます。
シンボリックリンクをたどる
file -L link_to_script.sh
リンク先の実体がスクリプトであれば「POSIX shell script」などと表示されます。
応用的な使い方
- スクリプト内で $(file -b –mime-type “$f”) を用いてファイルタイプを取得し、条件分岐に利用できる。
- find と組み合わせて特定タイプのファイルだけを検索する例:
find . -type f -exec sh -c 'type=$(file -b --mime-type "$1"); if [ "$type" = "application/pdf" ]; then echo "$1"; fi' _ {} \;
注意点とベストプラクティス
・file は magic データベース(/usr/share/file/magic)を参照します。OS のアップデートや新しいファイル形式を認識させたい場合は、file -C -m /path/to/custom.magic としてカスタムデータベースを指定できます。
・バイナリファイルや圧縮ファイルは、内部のヘッダ情報が無いと「data」や「unknown」と判定されることがあります。その場合は -z オプションで圧縮展開後の判定を試みることが有効です。
まとめ
file コマンドは、シェルスクリプトや日常的なファイル操作で「このファイルは何か?」を瞬時に答えてくれる便利なツールです。基本オプションを覚え、magic データベースを適切に管理すれば、ほぼすべてのファイルタイプに対応できます。