【file】Linuxでファイルの種類を取得するコマンド

Linuxのfileコマンドを使用することでファイルの種類を取得できます。

fileコマンドの書式

fileコマンドの書式は以下の通りです。

file [オプション] ファイル名

fileコマンドの引数には情報を取得したいファイル名を指定します。

オプション

-b 行の最初にファイル名を出力しない
-i mimeタイプ文字列で出力する
-L シンボリックリンクを辿るようにする
-N 出力時に空白の追加を行わない
 -n 1つのファイルをチェックするごとに標準出力に出力する
 -z  圧縮ファイルの中もチェックする

ファイルの種類を取得する

fileコマンドの引数にファイルまたはディレクトリを指定します。

$ file a.txt 
a.txt: ASCII text

$ file b.png
b.png: PNG image data, 50 x 50, 8-bit/color RGB, non-interlaced

$ file d
d: directory

ファイルの文字コードや画像の形式、サイズなども取得することができます。

また、空白で区切ることで複数のファイルを同時に指定することも可能です。

$ file d.jpg e.pdf
d.jpg: JPEG image data, EXIF standard
e.pdf: PDF document, version 1.3

圧縮前の種類を表示する

圧縮ファイル(list.txt.gz)の圧縮前の種類を取得するには、オプション「-z」を使用して以下のように実行します。

$ file -z a.txt.gz 
a.txt.gz: ASCII text (gzip compressed data, was "a.txt", from Unix, last modified: Wed Oct 12 11:53:25 2016)

$ file a.txt.gz 
a.txt.gz: gzip compressed data, was "a.txt", from Unix, last modified: Wed Oct 12 11:53:25 2016

オプションを指定しない場合は、圧縮ファイルと表示されるのに対して、「-z」オプションを指定した場合は、テキストファイルとして表示されています。

fileコマンドの仕組み

fileコマンドは、ファイルシステムテスト、マジックナンバーテスト、言語テストの順序で3つのテストを行い、ファイルの種類を特定しています。

ファイルの内容をテストして判別しているため、拡張子などを変更してもファイルの種類を正しく判定することができます。

$ mv b.png b
$ file b
b: PNG image data, 50 x 50, 8-bit/color RGB, non-interlaced

この例では、ファイルの拡張子を除去した場合でも、pngファイルと判定されています。