試験運用中なLinux備忘録・旧記事

はてなダイアリーで公開していた2007年5月-2015年3月の記事を保存しています。

fileコマンドの出力をZenityでグラフィカルに表示する

多くのファイルの種類では種類ごとに固有の「マジック」と呼ばれる文字列がファイルの先頭に含まれていて、これを利用してファイルの種類を識別し、更に種類ごとに追加の情報を取得して表示するfileというコマンドがあるのだが、これを端末から使う代わりにGUIファイルマネージャから選択した項目(複数可)に対して実行した結果をグラフィカルに一覧表示できるようなスクリプトを作成した。

スクリプト

Zenityを使用している。また、このスクリプトPythonで書かれているので、Pythonがインストールされていないと動作しない。subprocessモジュールを使用しているため、バージョン2.4以上が必要。
[任意]ファイル名: action-file.py

#! /usr/bin/python
# -*- encoding: utf-8 -*-

# 名前: ファイル情報を調べる(_I)
# 説明: 選択したファイルの種類や情報を表示します
# 依存: Zenity
# icon: 任意
# 対象: ファイルとディレクトリ/単複 ファイル名: *
# 引数: 全てのファイル/ディレクトリのパス(複数可)
#       Nautilus Actions: %M
#       Thunar: %F

import subprocess
import sys

cmd_file = ["file", "-nNF", "|"]
cmd_zenity = ["zenity", "--list", "--title", u"ファイル情報".encode("utf-8"), "--width", "500", "--height", "250", "--editable", "--text", u"ファイル情報".encode("utf-8"), "--column", u"名前".encode("utf-8"), "--column", u"説明".encode("utf-8")]
for item in sys.argv[1:]:
  cmd_file.append(item)
p = subprocess.Popen(cmd_file, stdout=subprocess.PIPE)
for line in p.stdout:
  for arg in line.rstrip().split("| "):
    cmd_zenity.append(arg)
subprocess.call(cmd_zenity)

(2009/2/6)fileコマンドの出力を分割してZenityの引数に追加する処理の記述を短く修正
(2009/2/23)子プロセスからの出力を処理する部分とrstrip()の記述を短く修正(両方で結構短くなった)

Thunarで使用する場合の設定

「基本」タブ
  • 名前: ファイル情報を調べる(_I)
  • 説明: 選択したファイルの種類や情報を表示します
  • コマンド: [スクリプトの場所・ホームディレクトリを「~」と書いてもOK] %F
「登場する条件」タブ
  • 以下を選択した場合に登場: 全て

Nautilus-actionsで使用する場合の設定

既定の設定の部分は省略し、変更するところだけを書いている。

「メニュー・アイテムとアクション」タブ
  • Nautilus のメニュー・アイテム
    • ラベル: ファイル情報を調べる(_I)
    • ツールチップ: 選択したファイルの種類や情報を表示します
  • アクション
条件タブ
  • 選択したアイテムが次に属していたら表示する
    • 両方
    • 選択したアイテムが複数のファイルまたはフォルダの場合は表示する