Google製AI駆動型ファイルタイプ検出ツール「Magika」を使ってファイルの種別を識別する。「このファイルの種類を調べて」「ファイルタイプを検出して」「拡張子が正しいか確認して」「magikaを使って」「ディレクトリ内のファイルを分類して」などのリクエストでトリガー。magikaがインストールされていない場合はインストール手順も案内する。
Google製のAI駆動型ファイルタイプ検出ツール。従来のマジックバイト(ファイルシグネチャ)ベースと異なり、ディープラーニングモデルで200以上のコンテンツタイプを高精度(平均 ~99%)・高速(~5ms/ファイル)に識別する。
まず magika が利用可能かを確認する。
magika --version
インストールされていない場合:
# CLIツールとして使う場合(推奨)
pipx install magika
# Python ライブラリとしても使う場合
pip install magika
pipxが使えない場合はpip install magikaを使用する。pipが見つからない場合はpip3またはpython3 -m pipを試す。
# デフォルト出力(説明 + グループ)
magika ./unknown_file
# シンプルなラベルだけ出力(自動化に推奨)
magika --label ./unknown_file
# MIMEタイプを出力
magika --mime-type ./unknown_file
# スコア(信頼度)も表示
magika --output-score ./unknown_file
# 複数ファイルを一括識別
magika file1 file2 file3
# ディレクトリを再帰的に識別
magika --recursive ./target_dir/
# ワイルドカード
magika ./uploads/*
cat unknown_file | magika -
# JSON 出力(全ファイルをまとめて配列)
magika --json ./file
# JSONL 出力(1ファイル1行、ストリーム処理向け)
magika --jsonl ./file
# jq と組み合わせてラベルだけ取り出す
magika --json ./file | jq '.[].result.value.output.label'
# パスとラベルだけ
magika --format '%p: %l' ./file
# パス・ラベル・スコア
magika --format '%p\t%l\t%s' ./uploads/*
from magika import Magika
m = Magika()
# ファイルパスで識別
result = m.identify_path("./unknown_file")
print(result.output.label) # 例: "python"
print(result.output.mime_type) # 例: "text/x-python"
print(result.output.group) # 例: "code"
print(result.score) # 例: 0.99
# バイト列で識別(ファイルシステムに依存しない)
result = m.identify_bytes(b"#!/usr/bin/env python3\nprint('hello')")
print(result.output.label)
# 複数ファイルを一括識別(効率的)
results = m.identify_paths(["a.txt", "b.bin", "c.unknown"])
for r in results:
print(r.path, r.output.label)
magika --version でインストールを確認pipx install magika を案内magika --json <ファイル> で識別output.label / output.description をユーザーにわかりやすく報告magika --recursive --jsonl <ディレクトリ> で全ファイルを識別jq でグループやラベルごとに集計・フィルタ# 拡張子と実際のタイプを並べて確認
magika --format '%p\t%l' ./uploads/* | \
awk -F'\t' '{ split($1, a, "."); ext=a[length(a)]; print $0 "\t" ext }'
CLIオプション全一覧・JSON出力構造・Python API 詳細は references/commands.md を参照。