拡張子から種類を判別できないファイルや、拡張子と違う種類として扱いたいファイルでサムネイルを生成したいときは、qlmanageに-c <コンテンツタイプ>を付ける。使うジェネレータまで固定したいときは、-g <ジェネレータのパス>も付ける。
$ qlmanage -t -c public.html -o out page.qlx9
Testing Quick Look thumbnails with files:
page.qlx9
- force using content type UTI: public.html
* /path/to/page.qlx9 produced one thumbnail
Done producing thumbnails
page.qlx9は、HTMLを書いた拡張子が不明のファイルである。-cのコンテンツタイプには、UTI(Uniform Type Identifier)を指定する。実行例はmacOS 27.0.1のもの。
拡張子が不明のファイルはコンテンツタイプを指定する
qlmanageは、ファイルの拡張子からコンテンツタイプを決める。拡張子が不明のファイルでは、コンテンツタイプがdyn.で始まる動的な値になる。
$ mdls -name kMDItemContentType page.qlx9
kMDItemContentType = "dyn.ah62d4rv4ge81c5d2he"
このファイルに-cを付けずに-tを実行すると、サムネイルは生成されず、コマンドも終了しない。
$ timeout 8 qlmanage -t -o out page.qlx9
$ echo $?
124
124はtimeoutが8秒でコマンドを打ち切ったときの終了コードである。timeoutはGNU coreutilsのコマンドで、macOSではbrew install coreutilsでインストールすると使える。
-cでコンテンツタイプを指定すると、サムネイルを生成できる。
指定したコンテンツタイプで見た目が変わる
同じファイルでも、指定するコンテンツタイプによってサムネイルが変わる。page.qlx9をテキストファイルとして扱うと、HTMLのソースコードがそのまま描画される。
$ qlmanage -t -c public.plain-text -s 300 -o out page.qlx9

HTMLファイルとして扱うと、HTMLがレンダリングされる。
$ qlmanage -t -c public.html -s 300 -o out page.qlx9

プレビューでも同様に、指定したコンテンツタイプが使われる。-pでpublic.htmlを指定すると、プレビューが生成される。
$ qlmanage -p -c public.html -o out page.qlx9
* page.qlx9 produced a preview with a URL of type public.html
public.plain-textを指定すると、拡張子が不明のファイルではプレビューが生成されない。.txtのファイルでは生成される。
$ qlmanage -p -c public.plain-text -o out page.qlx9
* page.qlx9 did not produce any preview
$ qlmanage -p -c public.plain-text -o out sample.txt
* sample.txt produced a preview with a URL of type public.plain-text
指定できるコンテンツタイプを調べる
qlmanage -m pluginsで、コンテンツタイプとジェネレータの対応を確認できる。
$ qlmanage -m plugins | grep -E '^ public\.(html|plain-text|rtf|xml) '
public.xml -> /System/Library/QuickLook/Text.qlgenerator (1114)
public.rtf -> /System/Library/QuickLook/Text.qlgenerator (1114)
public.html -> /System/Library/QuickLook/Web.qlgenerator (1114)
public.plain-text -> /System/Library/QuickLook/Text.qlgenerator (1114)
左がコンテンツタイプ、右がそのコンテンツタイプを担当するジェネレータである。括弧内はジェネレータのバージョンである。読み込み済みのジェネレータには、(48 - loaded)のようにloadedが付く。
参考: 【qlmanage】Quick Lookのジェネレータ一覧と統計情報を表示する (-m)
コンテンツタイプに対応するジェネレータがないと終了しない
ジェネレータがないコンテンツタイプを指定すると、拡張子が不明のファイルと同様に、サムネイルは生成されず、コマンドも終了しない。存在しないコンテンツタイプも同様である。
$ timeout 8 qlmanage -t -c no.such.type -o out page.qlx9
$ echo $?
124
com.adobe.pdfのように、ファイルの中身と合わないコンテンツタイプを指定した場合も、サムネイルは生成されない。
-gでジェネレータを固定する
-gにジェネレータのパスを指定すると、使うジェネレータを固定できる。-cで指定したコンテンツタイプを担当するジェネレータを、qlmanage -m pluginsの結果から選ぶ。
$ qlmanage -t -c public.html -g /System/Library/QuickLook/Web.qlgenerator -o out page.qlx9
Testing Quick Look thumbnails with files:
page.qlx9
- force using content type UTI: public.html
- force using generator at path: /System/Library/QuickLook/Web.qlgenerator
* /path/to/page.qlx9 produced one thumbnail
Done producing thumbnails
-gには、.qlgeneratorディレクトリの絶対パスを指定する。Text.qlgeneratorのようにファイル名だけを渡すことはできない。
-gは-cと一緒に指定する
-gだけを指定すると、エラーで終了する。終了コードは1である。
$ qlmanage -t -g /System/Library/QuickLook/Text.qlgenerator -o out sample.txt
qlmanage: -g option requires -c option
Usage: qlmanage [OPTIONS] path...
...
存在しないパスや合わないジェネレータでは終了しない
存在しないパスを指定すると、Can't get generator at <パス>と表示される。サムネイルは生成されず、コマンドも終了しない。
$ timeout 8 qlmanage -t -c public.plain-text -g /nonexistent.qlgenerator -o out sample.txt
Can't get generator at /nonexistent.qlgenerator
コンテンツタイプと合わないジェネレータの組み合わせも同様である。public.htmlにText.qlgeneratorを組み合わせると、サムネイルは生成されない。
$ timeout 8 qlmanage -t -c public.html -g /System/Library/QuickLook/Text.qlgenerator -o out page.qlx9
$ echo $?
124
使い分け
| 目的 | オプション |
|---|---|
| 拡張子が不明のファイルのサムネイルを作る | -c <UTI> |
| 拡張子と違う種類として扱う | -c <UTI> |
| 使うジェネレータを固定する | -c <UTI> -g <ジェネレータのパス> |
