Linuxのfileコマンドを使用することでファイルの種類を取得できます。
fileコマンドの書式
fileコマンドの書式は以下の通りです。
1 |
file [オプション] ファイル名 |
fileコマンドの引数には情報を取得したいファイル名を指定します。
オプション
-b | 行の最初にファイル名を出力しない |
-i | mimeタイプ文字列で出力する |
-L | シンボリックリンクを辿るようにする |
-N | 出力時に空白の追加を行わない |
-n | 1つのファイルをチェックするごとに標準出力に出力する |
-z | 圧縮ファイルの中もチェックする |
ファイルの種類を取得する
fileコマンドの引数にファイルまたはディレクトリを指定します。
1 2 3 4 5 6 7 8 |
$ 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 |
ファイルの文字コードや画像の形式、サイズなども取得することができます。
また、空白で区切ることで複数のファイルを同時に指定することも可能です。
1 2 3 |
$ file d.jpg e.pdf d.jpg: JPEG image data, EXIF standard e.pdf: PDF document, version 1.3 |
圧縮前の種類を表示する
圧縮ファイル(list.txt.gz)の圧縮前の種類を取得するには、オプション「-z」を使用して以下のように実行します。
1 2 3 4 5 |
$ 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つのテストを行い、ファイルの種類を特定しています。
ファイルの内容をテストして判別しているため、拡張子などを変更してもファイルの種類を正しく判定することができます。
1 2 3 |
$ mv b.png b $ file b b: PNG image data, 50 x 50, 8-bit/color RGB, non-interlaced |
この例では、ファイルの拡張子を除去した場合でも、pngファイルと判定されています。