2012年9月30日日曜日

ファイルを探すコマンド

Finderの「このアプリケーションで開く」その2や、locateデータベースを作る方法の中でlocateコマンドでファイルを探す記事を書きました。自分の場合、どのようにファイルを探したり思い出したりするのにどんな方法を使っているか主なところを書いてみます。この記事ではターミナルというかシェル(bash)を使う場合について書いています。

次の3つの使用場面で分けてみました。(1) 現在のディレクトリ内を探したい場合、(2) 現在または特定のディレクトリとそのサブディレクトリ含めて探したい場合、(3) コマンド名を探したい場合の3つです。

(1) まず、はじめは、現在のディレクトリ内ですね。
lsコマンドを使う場合が多いです。普通すぎますね。lsコマンドは、現在自分のいるディレクトリや、指定したディレクトリのファイル名を表示します。よく使うのは、単純な
$ ls
と、作成時間の順に表示する
$ ls -lt (または $ ls -ltr )
です。
-ltオプションは、ファイルの変更時間が新しい順に表示します。-ltrオプションのように-rを追加すると古い順に表示します。最近使ったファイル名をしりたい場合が多いので、-rを指定すると次のコマンドプロンプトの近くにファイル名が表示されて便利です。-rを使わないと、最近のファイルが画面からスクロールアウトしてしまう場合も多いですしね。
ファイルが多い場合は、lessやhead, tailで画面外に出ないようにすることもあります。
また、多少ファイルが多い場合は、ls a*.html のようにワイルドカードで一部を指定したりすることもあります。
同じディレクトリ内ですと、ほとんどlsで用が足りますね。

(2) 次は、現在ディレクトリとそのサブディレクトリすべて、またはあるディレクトリとそのサブディレクトリ以下をすべて探す場合です。現在いるディレクトリや特定のディレクトリの場合は、findコマンドを使う場合が多いですがlocateコマンドも使います。
$ find . -name "*foobar*"
上のfindコマンドの場合は、"."は、カレントディレクトリを示すので、現在のディレクトリ以下から探すことを意味し、-nameコマンドでファイル名の一致条件を指定します。この場合は、ファイル名の一部に"foobar"を含むファイルを探して表示します。ファイル名の大文字、小文字の区別をしない場合は、-inameオプションが使えます。
また、ファイル名の代わりにディレクトリ名を探す場合は、次のように-type dを追加します。
$ find . -type d -iname "application*"
探したいファイルが、特定のディレクトリの下にあるとわかっている場合は、例えば
$ find /opt/local -name "a*.conf"
のようにするか、そのディレクトリに移動後(cd /opt/local)、探したいパス名の部分に"."を指定しています。後でフルパス名を使いたい場合が多いので、初めの方法をよく使います。
findコマンドは他にも時間指定したり、見つかったファイルに対して処理を行うオプションなどがあるので調べると面白い使い方が出来ると思います。

locateコマンドは、ファイルがどこにあるかわからない場合や、findコマンドで探すとディレクトリ階層の上位(/に近い場合)で、その下にファイルが大量にある場合、まず、locateコマンドを使ってみるという使い方が多いです。使い方は、単純に
$ locate "ファイル名の一部"
とすることが多いです。
locateコマンドはfindコマンドに比べスピードが速いのですが、

  • データベースを作っておく必要があります。
  • データベースは、設定にもよりますが一週間に一回しか更新されないので最近作成したファイルは見つけられません。
  • 検索する単語が短かかったり、パス名の上の階層に一致する場合は出力が多すぎて、そこからさらに絞り込まないといけない場合が結構あります。
  • Macを個人で使っている場合はあまり関係ないかもしれませんが、サーバーのように他の人も使う場合、他のユーザからファイル名が見られてしまうというセキュリティ上の問題があります。

といったことを注意しておく必要があります。
実行ファイルのコマンド名を忘れた場合に限られますが、which、

(3) 最後の場合として、コマンド名を探す場合です。
よく使うのは、whichコマンドです。
$ which curl
などのように、コマンド名を指定します。シェルがbashの場合、whichコマンドは、現在指定しているPATHに従って有効なコマンドのパス名を表示します。例えば、/usr/localの下やMacPortsを使って標準以外の場所にも、標準と同名のコマンドをインストールしている場合、どれが使われているかを確認できます。
気をつけないといけないのは、実際はbashのビルトインコマンドを使っている場合やaliasで既存のコマンドと同じ名前でコマンド名を置き換えていても、ファイルシステム上に見つかったコマンドしか表示されない点です。私の環境で、cdとh、aaaを指定した場合ですが、以下のようになります。
$ which cd
/usr/bin/cd # whichの出力です
$ which h
$ # 何も表示されません。
$ which aaa
$ # 何も表示されません。
でも、実際は、cdは、bashの内部に組み込まれているcdコマンドが使われています。また、lsもalliasコマンドで、h='history | tail -40 | more'と設定しています。
最近はbashを使っているのですが、以前使っていたtcshでは、
% which cd
cd: shell built-in command.
% which h
h: aliased to history 25
% which aaa
aaa: Command not found.
のように、実際に使っているコマンド(historyもシェル組み込みコマンドです)が表示されます。見つからない場合も見つからないと表示されます。

また、which コマンドの引数には探したいコマンド名をフルネームで指定しないと結果が表示されないので、コマンド名を忘れていると使えないですね。
コマンド名を覚えておかないといけない欠点をカバーする方法として、bashの組み込みコマンドcompleteがありますね。コマンド名やファイル名の先頭部分を入力して、覚えている場合に、lsで始まるファイル名の候補を示してくれます。以下は、コマンドプロンプトに、which lsと入力し、tabキーを押した場合の表示です。
$ which ls[tab]

ls        lsdistcc  lsm       lsof      
lsbom     lslen.sh  lsmac     lsvfs
$ which ls
ここで、表示を見ながら入力を継続したり、例えば"v[tab]"と入力すると、lsvfsまで補完
してくれます。
$ which lsv[tab] # tabキーを押した瞬間、次の行のように表示されます。
$ which lsvfs
ファイル名を探す場合より、入力を結構便利です。
長くなったのでこのあたりで終わります。また、関連した話題を書きたいとおもいます。

2012年9月29日土曜日

新しいMacを買いましたが

自分のではなく、家族のMacです。
家族のノートPCが壊れたのですが、折よくヨドバシカメラでMacを買うと古いWindows機の下取りに2万円上乗せしてくれるというキャンペーンをやっているのを今週半ばに知りました。この際なので、家族をMacユーザに(再度)することにしました。
今日(9月29日)がキャンペーンの最終日ということで、在庫があまりないとのことでしたが、MacBook Air 13 (Core i5 1.8GHz, 128GB SDD)を購入することができました。ちょっとうらやましい。
ちなみに、古いノートPCがもう一台あったので、自分のMac miniもそのキャンペーンに乗って買おうかと思っていたのですが、在庫がないとのことで購入できませんでした。
また、キャンペーンは9月2日から始まっていたのに、ずっと知らなかったという自分の情報収集力の低さも反省ですね。

2012年9月22日土曜日

ターミナルから無圧縮ZIPファイルを作る

少し前の記事で、Automatorでシェルスクリプトを実行するという内容の記事がありましたが、無圧縮ZIPファイルをどのようなコマンドで作っているか書いていませんでした。その記事へのアクセスが結構多いようですので、実際にZIPファイルを作っている部分を書いてみます。エラーチェック等は省略して、肝心の部分は以下のような感じになっています。

zip -r -n ".jpg:.JPG:.jpeg:.JPEG:.gif:.GIF" "$zipf" "$zipd" -x ".DS_Store"

-r オプションは、ZIPの入力ファイルにディレクトリがある場合、再帰的にたどっていくことを指示します。
-n オプションは、引数として与えられた拡張子を持つファイルを、圧縮しないように指示します。tiffやpngも入れてもいいかもしれません。大文字小文字の違いを無視できればよいのですが、ちょっと冗長になっています。私は、テキストファイルなどは圧縮したいので、このオプションを使っています。
-nオプションの代わりに、-0オプションを使えばすべてのファイルが無圧縮になります。-# (#は0から9の数字が入ります)の形式のオプションは、圧縮スピードを相対的に指定するのですが、-0は無圧縮の指定になっています。-0の方が無圧縮ファイル作成の目的に合う人はこちらの方がよいと思います。
$zipfは、作成するZIPファイル名が入った変数です。
$zipdは、作成対象のディレクトリ名が入った変数です。両方共ダブルクォーテーションで囲んであるのは、文字列中にスペースがあるとシェルが別々の引数として処理するため、予防的に入れています。
最後の-xオプションは、ZIPの対象としないファイルを指定します。.DS_StoreはFinderが不可視ファイルとして作る場合がありますが、今回はZIPファイルに含める必要はないため除外するようにしています。

zipコマンドの詳細はターミナルからmanコマンドで調べることもできます。

2012年9月18日火曜日

Spirited Awayで集中。便利です。

Spirited Awayというアプリケーションを使っていますが意外と便利です。だいぶ前の、2chのおすすめアプリ紹介で知りました。Spirited Awayとは神隠しという意味らしいです。

機能ですが、起動しているアプリケーションが設定している時間操作されないと自動的にそれを隠してくれる(command + Hと同じ)というものです。
何がいいかというと、

  • 今やっている作業(Wordやエディタでのドキュメント作成でも、ウェブ検索でも)に集中できる点
  • 意図的に他のアプリケーションを隠す操作をしなくても自然に使える点
  • しばらく席を外したりしていると、デスクトップピクチャやNerdToolで設定した内容が見えるようになる点

などです。以前は、すぐにブラウザに目が行って必要もないのにニュースを見たりすることがありました。また、デスクトップピクチャもお気に入りのものがランダムに変わるようにしたりしていますが、以前はいろいろなアプリケーションでデスクトップは大体隠されていて、あまり見えなかったのですがよく見えるようになりました。
デスクトップが見えるようになると、逆にデスクトップにアイコンを置きたくなくなりました。スクリーンショットも生成場所を変更し、ディスクボリュームも表示しないようにしています。Finderで不可視ファイルを表示するようにしていますが、Desktopフォルダに何も作られないので .DS_Store ファイルもできなくなりました。

良くない点としては、隠れていたアプリケーションを表示した時に、すぐにまた隠れてしまい、もう一度表示しないといけない場合があります。

どちらでもない点としては、隠れているアプリケーションを呼び出すために、Quicksilverやcommand + tabキーの出番が増えたことが挙げられます。私にとっては、キーボード操作の方が好きなので良い点かもしれません。

現在は、隠す時間を10分にしています。あまり間隔が短いとそれも気になりますので。

2012年9月17日月曜日

サウンド出力の光デジタル出力とSoundflower

私はMacのサウンド出力をミニコンポにつないでいます。ソニーのCMT-M700DVDという古い機種でもう10年ほど使っています。
平日は3~4時間、休みの日は出かけない時なら10時間はiTunesの曲を流していますが、全然壊れない優れものです。
以前は、アナログケーブルでMacとコンポを接続していたのですが、ケーブルの調子が悪くなり音が片方からしか聞こえなくなってきました。ケーブルを替えることにしたのですが、MacもCMT-M700DVDも光デジタルに対応しているので、今回は光ケーブルで接続することにしました。

光ケーブルの接続自体は特に問題なく、音も出ているのですが問題がひとつあります。それは、Macのシステム側からは音量が調整できないことです。もう少し正確にいうと、キーボードの音量アイコンのついたボタンで調整できないのです。iTunes内からはボリュームスライダで音量が調整できます。
メニューバーもグレイアウトしていますし、システム環境設定のサウンドでもボリュームが最大側になっていて、選択できません。調べるとMacの仕様のようです。
iTunesに入っている曲の音量が結構違っていたり、深夜になると音量を小さくするなど、調整にキーボードを使っています。
スピーカも部屋もそれなりなので、音質はそこそこで、機能性(キーボード)を使える方法はないかと調べると、Soundflowerという仮想オーディオデバイスと音源の出力先などを切り替えてくれるSoundflowerBedが使えるようです。
インストールした後、サウンドシステム環境設定で出力をSoundflower (2ch)にします。



また、SoundflowerBedを起動するとメニューバーにアイコンが現れますので、Soundflower (2ch)の出力をBuilt-in Outputにします。
これで、接続されているミニコンポから音が出て、ボリュームも調整できるようになりました。音質は、Soundflowerで変化している可能性はありますが私にはわかりませんでした。
ただ、出力に微妙にタイムラグがあります。バッファサイズが大きいとタイムラグも大きいようです。メニューバーのSoundflowerBedアイコンから、Soundflower (2ch)のサブメニューでバッファサイズを変更できますので、現在は最小の64で使っています。ディスクアクセスが激しいと曲が途切れやすいもしれません。

SafariでPDFをウィンドウに表示しない (2)

SafariでPDFをウィンドウに表示しないように(ダウンロードしてから見るように)して、Safariを使っていました。が、昨日Adobe ReaderをVer.8からVer.X(10.1.4)にアップデートしたところ、PDFをダウンロードしないようになってしまいました。Safariには、ClickToPluginという機能拡張を入れており、灰色のままの状態の時の表示を見ると、Adobe Acorbat Plug-inを使おうとしているようです。
Adobe Readerの環境設定のインターネットの項目を見ると、PDF をブラウザーに表示がチェックされてグレイアウトされていて変更できません。
Adobeのトラブルシューティングのページ (以下)を見ると、既知の問題で
http://helpx.adobe.com/acrobat/kb/troubleshoot-safari-plug-acrobat-x.html
To disable Safari integration, delete the AdobePDFViewer.plugin from  /Library/Internet Plug-ins 
となっていて、/Library/Internet Plug-Ins/AdobePDFViewer.pluginを削除してくださいということのようです。このドキュメントには、AdobePDFViewerNPAPI.pluginについては記載がありませんが、AdobePDFViewer.pluginと同様にSafari内でPDFを表示してくれるプラグインのようです。両方とも使わないので以下のようにしました。

$ cd /Library/Internet\ Plug-Ins/
$ sudo mkdir disabled
$ sudo mv AdobePDFViewer* disables

削除せずに別のディレクトリ (disabled)を作成して、そこに移動しました。一応その結果、Safariで以前と同じようにPDFがダウンロードされるようになりました。

また、PDFの表示とは直接関係ないのですが、Acrobat Javascriptを使用するように設定されていたので、使用しないように変更しました。メジャーバージョンアップをすると、以前の設定は引き継がれないのでしょうか。以前、ゼロデイ脆弱性が報告されて以来、使うこともないので使用しないようにしています。

2012年9月16日日曜日

Quicksilver β70 その後の状況 [2012/9/22 追記]

Quicksilver b70を使っていますが、少しメモリ使用量が大きいようです。下の図では実メモリ280MB、仮想メモリ500MBを使っていますが、以前見たときは実メモリが400MBを超えていました。起動したアプリケーションで一番使っています。
会社で使っているMacのQuicksilver b70はメモリ使用量が40MB程度なので、自宅のQuicksilverはちょっとメモリ使用量が多いようです。Macにメモリが大量に積んであれば問題ないのですが、このMac miniには3GBしか積めません。他のアプリケーションのメモリ使用量も最近多いので、スワップが1, 2GB以上発生することも多くストレスになることも多いです。
あまり使っていないPluginを外して2,3日様子を見ていましたが、あまり変わりませんでした。現在は、Quicksilver b70を32bitモードで起動するようにして様子を見ています。
現在のところ、メモリ使用量が以前より少なくなっています。
ただ、問題点もあり、32bitモードでは動作がおかしいPlugin (BezelHUD)があったり、起動時にQuickSilverがクラッシュしたりする場合があり、やや不安定な印象はあります。
逆に、64bitに対応していないプラグインもありますが。
インタフェースは、普通のBezelインタフェースで使っています。

[2012/9/22 追記 β70の正式版 (3935) が出たのでインストールしました。現在64ビットモードで使っていますが、120MBから130MB程度を推移しています。]

2012年9月15日土曜日

Finderの「このアプリケーションで開く」その3

一応、表題の問題は解決はしたのですが、前回からの続きです。
The Unarchiver以外にも、複数回登録されているアプリケーションがないか、確認してみました。
前回と同じく、lsregisterのあるディレクトリに移動します。

$ cd `dirname \`locate lsregister\``

次のコマンドをターミナルから入れて確認します。

$ ./lsregister -dump | grep "path: .*\.app" | sort | uniq -d


各コマンドの説明をします。
lsregisterの -dump オプションで、Lauch Servicesが使っているデータベースを出力して次のgrepコマンドに渡します。
grepコマンドは、渡された文字列から条件に合う行を探して表示します。ここでは、渡された各行に、path:で始まり.appで終わるパターンがあるかどうかを探しています。path: 〜 .appは行の途中に出てきていてもかまいません。次に、sortコマンドに見つかった結果を渡します。
sortコマンドは、入力された行を順番に(今回の場合アルファベット順)に並び替えて表示します。その結果をuniqコマンドに渡します。
uniqコマンドは、入力から重複している行を探してくれます。uniqコマンドは隣同士の行(1行前の行と現在の行)しか比較しませんので、uniqにgrepの結果を渡す前にsortコマンドで順番に並び替えています。同じ行があれば隣同士になります。uniqコマンドの-dオプションは、重複している行だけを表示します。

結果は次のようになりました。

path:      /Volumes/Disk2/Applications/Flaex.app
path:      /Volumes/Disk2/Applications/GrowlTunes.app
path:      /Volumes/Disk2/Applications/Inkscape.app
path:      /Volumes/Disk2/Applications/OnyX.app
path:      /Volumes/Disk2/Applications/OpenOffice.org.app
path:      /Volumes/Disk2/Applications/Rember.app

同じパスで重複登録されているアプリケーションが6個ありました。あまり使っていないものばかりだったので、今回はそのままにすることにしました。
ところで、今のままですと、例えば起動ディスクと外付けディスクに同じアプリケーションがある場合見つかりません。これは、時間があればスクリプトでも作ってみようかと思います。

2012年9月14日金曜日

locateデータベースを作る方法

このアプリケーションで開く その2の記事で、lsregisterコマンドをlocateコマンドで見つけることができると書きましたが、locateコマンドが使えないというか期待通りに動作しない場合があります。locateコマンドが使うデータベースがまだ存在しない場合です。
Snow Leopardの場合ですが、以下のように表示されます。
$ locate lsregister

WARNING: The locate database (/var/db/locate.database) does not exist.
To create the database, run the following command:

  sudo launchctl load -w /System/Library/LaunchDaemons/com.apple.locate.plist

Please be aware that the database can take some time to generate; once
the database has been created, this message will no longer appear.

簡単に訳すると、
locateコマンドが使うデータベース(/var/db/locate.database)がまだないので、sudo launchctl から始まっているコマンドで作ってと言っています。
これをターミナルで実行すればデータベースが作られます。1行で入力する必要があります。結構時間がかかると注意書きがあります。


launchctlコマンドが、直接locateデータベースを作っているのではなく、launchdというデーモンプロセス(システム上に常駐しているプロセス)に、/System/Library/LaunchDaemons/com.apple.locate.plistファイルに従って動作するように教えています。このファイル中で、locateデータベースを作るコマンドや実行するタイミングなどが定義されています。興味のある人は調べるといいと思いますが、データベースは1週間に一度土曜日の午前3:15に更新されるようです。最近インストールしたファイルはすぐ見つからない場合もあるかもしれません。

2012年9月12日水曜日

Finderの「このアプリケーションで開く」その2

その1の続き(でも別の話)です。
その1は自宅のMacの話ですが、会社で使っているMacも同じようにコンテクストメニューでThe Unarchiver.appが2個表示されるようになりました。なんで、The Unarchiverばかりなんでしょう?
その1と違い、The Unarchiver.appにバージョン番号がついていません。
前回の手順と同じように、システムプロファイラからThe Unarchiverを探したのですが、1個しかインストールされていませんでした。
ウェブで(このアプリケーションで開く 複数と)検索したらLaunch Servicesのデータベースを再構築すると解決するらしいことがわかりました。
http://tinasite.net/archives/2007/1104_181253.php     (一番最初に見つかったページ)
http://news.mynavi.jp/column/osx/180/     (少し調べた範囲では、一番古いページ)
データベースの再構築のコマンドは、lsregisterでターミナルから使用するようです。OSのバージョンによってパスが異なっているようです。一番目のサイトの人も困っていたみたいです。locateコマンドを使ってみます。(locateデータベースを作っておく必要があります)
$ locate lsregister
会社のMac (10.6.8)の場合は
/System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/LaunchServices.framework/Versions/A/Support/lsregister
にあることがわかりました。そのディレクトリに移動します。
$ cd `dirname \`locate lsregister\``
     # $ cd $(dirname $(locate lsregister)) でも同じです。
lsregisterコマンドのヘルプを見てみます。
$ ./lsregister -h


lsregister: [OPTIONS] [ <path>... ]
                      [ -apps <domain>[,domain]... ]
                      [ -libs <domain>[,domain]... ]
                      [ -all  <domain>[,domain]... ]

Paths are searched for applications to register with the Launch Service database.
Valid domains are "system", "local", "network" and "user". Domains can also
be specified using only the first letter.

  -kill     Reset the Launch Services database before doing anything else
  -seed     If database isn't seeded, scan default locations for applications and libraries to register
  -lint     Print information about plist errors while registering bundles
  -convert  Register apps found in older LS database files
  -lazy n   Sleep for n seconds before registering/scanning
  -r        Recursive directory scan, do not recurse into packages or invisible directories
  -R        Recursive directory scan, descending into packages and invisible directories
  -f        force-update registration even if mod date is unchanged
  -u        unregister instead of register
  -v        Display progress information
  -dump     Display full database contents after registration
  -h        Display this help

まず、コンテクストメニューに2個のThe Unarchiver.appが表示されるようになったのでデータベースもそうなっているか、-dump オプションで確認してみます。
$ ./lsregister -dump | less
...
--------------------------------------------------------------------------------
bundle  id:            189632
        path:          /Applications/The Unarchiver.app
        name:          The Unarchiver
        identifier:    cx.c3.theunarchiver (0x8001c2da)
こんな感じで見つかりました。2個同じ/Applications/The Unarchiver.app のパスで登録されていました。
また、調べたウェブページでは、みんな -kill でデータベースを再構築してるみたいですが、ヘルプをみると、-u オプションで特定のパスを削除できそうです。安易ですが、失敗したら再構築すればいいかなと思い、試してみました。
$ ./register -u "/Applications/The Unarchiver.app"
ThrottleProcessIO: throttling disk i/o
ThrottleProcessIO:のメッセージで一瞬ドキッとしましたが、ディスクI/Oを少し絞って実行したようで無事終わりました。
-dumpオプションで確認したら、The Unarchiver.appは1個だけ登録された状態になっていました。
Finderで確認してみます。

直ったみたいです。

Finderの「このアプリケーションで開く」その1

Finderのコンテクストメニューに、「このアプリケーションで開く」というメニュー項目がありますが、最近、サブメニューに同じアイコンが出てくるようになりました。
自宅のMacと会社のMacでなぜか同じアプリケーションが出てくるようになったのですが、違う現象でした。
今回の記事は、自宅のMacの方の話です。
まず、2つ出てくるようになったアプリケーションですが、The Unarchiverです。ZIPファイルに対してメニューを出すと下の図のようになります。
The Unarchiver.app (3.3)とThe Unarchiver.app (3.0)という2つのサブメニューが出ています。
3.3と3.0がバージョンを示しているとすると、2つインストールされているようです。
ということで、探してみます。
Spotlightで見つかる場合も多いのですが、デフォルトではシステム領域をちゃんと探してくれないので以下の方法を使います。
まず、メニューバーの一番左のアップルメニューから「この Mac について」を開きます。


そのウィンドウの下の方の「詳しい情報...」というボタンを押します。
すると「システムプロファイラ」が開きますので、内容ペインのソフトウェアの欄のアプリケーションをクリックします。右のペインにThe Unarchiverが2個出てきます。
2つが別の場所にインストールされていました。今回は、古い方のバージョンを消去することで解決したようです。
The Unarchiver.appが2個現れるようになった原因ですが、当初、The Unarchiverを配布先からダウロードして、/Applicationsフォルダ以外にインストールしていたのですが、それをそのままにして、その後、App Storeからも入手して、/Applicationsフォルダにインストールからだと思います。
その2に続きます。(2012/9/15 タイトルを少し変更しました)

2012年9月11日火曜日

Finderのカラム表示でサービスメニューが使用できないバグ

Automatorでシェルスクリプトを実行する(フォルダを無圧縮ZIPにする)という記事で作成したアプリケーション(ここでは、zip4noncompとしています)を、ドラッグアンドドロップで使っていました。zip4noncompをDockに置いてドラッグアンドドロップしていたのですが、そのうち、Quicksilverで起動しようとして動かない場合があることに気づきました。
Snow Leopard (Mac OS X 10.6.8)の環境です。
フォルダを複数選択している場合は、command + escキーを押すと、Quicksilverがファイルを選択した状態(Finder Selection)で起動するので、その後Open with...を選び、アプリケーションとしてzip4noncompを選んであげればいいのですが、フォルダを1個だけ選択した状態でcommand + escキーを押しても何も反応がありません。フォルダを複数選択した状態だとちゃんとQuicksilverが起動します。

初めはQuicksilverのバグかと考えて検索したのですが、これといったページが見つかりませんでした。
いろいろ繰り返しているうちに、Quicksilverが起動しないのは、Finderをカラム表示している場合に1個だけフォルダを選択している場合だけ起きることがわかりました。それ以外のリスト表示やアイコン表示の場合は、フォルダを1個だけ選択していてもQuicksilverは起動するとわかりました。また、Quicksilverの説明を読むと、command + escはFinder Selectionや、最上位のアプリケーションで選択されている内容をサービスメニューに送るという機能のようです。
そこで、カラム表示で確認すると、フォルダ1個だけ選択している場合では、以下の図のようにサービスメニューに「サービスメニューは適用できません」と灰色で表示されます。

複数のフォルダの選択では、サービスメニューはきちんと表示され、Quicksilverも認識されていることがわかりました。
その後、更に調べるとSnow Leopardのバグと記載している記事が見つかりました。
"Sophos Anti-Virus for Mac OS X: サービスメニューからフォルダに対する Finder アイテムの検索を利用できない" (http://www.sophos.com/ja-jp/support/knowledgebase/62333.aspx)
既知の問題だったようです。
直るのは期待薄なので、Finderアイコン表示をアイコン表示に切替えて使うことにします。カラム表示は結構使うのですが。

2012年9月7日金曜日

Quicksilver β70 プレリリースを試してみました

QuickSilver b68 で日本語名を持つアプリが起動できないという記事について、β70で解決されているとのコメントをもらいましたので、試してみました。まだ、正式リリースではなく、pre-release (3934)のようです。
https://github.com/quicksilver/quicksilver/downloads からダウンロードできます。
前も使った、Calculatorを起動しようとしているスクリーンキャプチャです。今回は、ユーザーインターフェースをBezel HUDにしてみました。
きちんと認識されています。候補欄には日本語で「計算機」と出ています。
今度は、計算機と入力してみました。

使う頻度は少ないと思いますが、日本語でも見つけてくれました。
それから、もともと日本語のファイルも試してみました。
わざと「ユータ」と入力してみましたが、ちゃんとUTF-8文字を認識してマッチする候補を探してくれています。素晴らしいですね。
最後に、日本語のローカライズ名を持つフォルダを試してみたのですが、うまくいきませんでした。
「クールだよ」という名前でFinderで表示させているのですが、候補がでてきません。
最初うまくいったように思って何回か試したのですが、Quicksilverは前回の候補を次に起動した時に最初の候補として表示するのを勘違いしていたようです。
プレリリースですが、私の希望の動作をするのでこのまま使いたいと思います。情報をくださった方、どうもありがとうございました。

[追記: 2012/9/11 Quicksilver b70ですが、使っているうちにメモリ使用量が増えていくようです。起動時に280MB程度の実メモリが2,3時間で420MBになっています。いずれにせよ、もう少し様子をみたいと思います。]

2012年9月5日水曜日

Automatorでシェルスクリプトを実行する [追記あり 2012/9/22]

インターネットで拾った画像を、自作のシェルスクリプトでフォルダごと無圧縮ZIPファイルとしてまとめたりしていました。でも、Terminalからコマンド操作するのが面倒なときがあります。
そこで、Finderで選択した項目を個別にZIP化(非圧縮)してくれるアプリケーションを、Automatorで作ってみました。実際は、自作のシェルスクリプトを呼び出すだけですが、少し試行錯誤をしました。[追記: 2012/9/22 無圧縮ZIPをターミナルで作成する記事を書きました]
Automatorを起動してアプリケーションを選択します。そして、ライブラリのFinderから「選択されたFinder項目を取得」を選び右側の領域にドラッグアンドドロップします。
次に、ライブラリのAutomatorから「シェルスクリプトを実行」を選び先ほどの項目の下にドラッグアンドドロップします。
そして、シェルは今回は/bin/bash、入力の引き渡し方法は「引数として」を選びます。
スクリプトのウィンドウには、渡されたFinder項目を"$f"としてechoするスクリプトが記入されていますので、それを自作のコマンドに置き換えます。
適当な画像フォルダを選択して、このワークフローの実行ボタンを押したら、以下の警告ダイアログが出ました。テスト時には別のアクションを入れて、実際に使うときは取り除けと出ていますが、OKすると選択したフォルダがZIPファイルに変換されました。
出来上がったZIPファイルを見たのですが、フォルダの階層がトップから含まれています。これは邪魔です。

そこで、スクリプトを以下のように修正しました。
ループ中で、Finder項目のUnixパス名から、ディレクトリ部分とZIP化対象部分を取り出しています。次に、ディレクトリに移動してからZIP化対象部分だけをシェルスクリプトに渡しています。今度は、ZIP化対象部分以下だけがZIPファイルに含まれていました。

これで基本機能を確認できたので、ワークフローをアプリケーションとして保存し、そのアイコンにフォルダをドラッグアンドドロップしたのですが、実行される気配がありません。Dockの対応アイコンを右クリックすると「アプリケーションが応答しません」と薄い字で表示されています。仕方がないので強制終了しました。その後、ウェブで調べるとどうもワークフローの先頭の「選択されたFinder項目を取得」はいらないようです。
上のように「シェルスクリプトを実行」だけを残して、アプリケーションとして保存し直したところ、ドラッグアンドドロップで動作するようになりました。

関連記事: シェルスクリプトをMacのアプリケーション化するシェルスクリプト

2012年9月1日土曜日

そろそろ新しいMacが欲しい(2)

前の記事で、そろそろ新しいMacが欲しいということを書きました。
書くとだんだん欲しくなってきますね。
仕事でMacBook Airを使っていなければMacBook Airを候補にしていたのではと思いますが、次も今と同じくMac miniになりそうです。
Mac miniにもいくつかモデルがあるみたいですね。大きく次の3つでしょうか。
1) Core i5 2.3GHzモデル
2) Core i5 2.5GHzモデル/Core i7 2.7GHzモデル
3) Core i7 2.0GHzモデル (OS X server モデル)

自分のMacで困っているのはメモリ不足ですが、最新のMac miniの最大メモリ量は、どのモデルでも公式では8GBで非公式では16GB搭載可能のようです。今使っている機種のメモリ使用量を見ていますが、時々スワップが2GBまで増えていることがあります。実メモリを3GB搭載しているので、8GBあれば当面よさそうですが、ある程度長く使いたいので16GBあると安心ですね。

それから、MacBook Airを使ってわかったのですが、SSDだとMacの起動とアプリケーションの起動時間が短くとても快適です。SSDを選択できるのは、2)の2.7GHzモデル(オプション)と3)のOS X serverモデルのようです。

2)のモデルには、GPUチップも搭載されていますが、ゲームをしないので必要性はあまり感じないですね。動画再生が少しスムーズになるかもしれません。
CPU性能については、Core i7 2.0GHzだけ4コアで他のモデルと異質ですね。でも、GPUよりCore i7の方がちょっと興味があります。OS X serverは、サーバにするつもりはないのでどちらでもいいという感じです。

候補のMac miniで気になる点は、
1) USB3.0がない
2) CD/DVDドライブがない
3) そろそろ新しいMac miniが出ないか
というところです。
USB 3.0はなくてもそれより速いThunderboltがあるのですが、周辺機器はまだ少なかったり高かったりしますね。それに、今年発売されたMacBook ProはUSB 3.0が付いているのでもしMac miniに新モデルが出たらUSB 3.0が付いてくるのではという気がします。

CD/DVDは、必要な時に元のMac miniを立ち上げるか、外付けのドライブを買えば良さそうですが、ちょっと不便かもしれません。AppleはApp Storeでネット経由での販売を進めたいようですが、日本の音楽があまりないので私にはまだCDドライブが必要です。

最後に、次のMac miniがそろそろ出ないかということですが、どうなんでしょう。iMacの新しいモデルがそろそろ出るんじゃないかと噂されていますね。それと前後してMac miniもアップデートされたりするのでは。CPUは、そんなに高速化される訳ではないと思いますし(せいぜい 2割程度?)、メモリが32GB搭載可能になっても関係ありませんし、USB 3.0が付くかどうかが一番関係ありそうです。

今回も、だらだらと長く書いてしまいました。こういうのをチラ裏というんですね。

Quicksilver β69を少しだけ試してみましたが

Quicksilver β69が出ていたので(7月後半だと思いますが)、今更ながら試してみました。
以前の記事で、β68から日本語表示を持つアプリケーションが、英語で起動できなくなったのでβ67に戻したということを書きました。
今度のバージョンで解決されていないかと思っていたのですが、結論を書くとβ68と同様に英語名では起動できませんでした。β67では出来なかった日本語名での起動が出来るようになっていました。(β68から日本語名で起動できていたようですが、今回初めて検証してわかりました)
結論としてはここで終わりですが、日本語名での起動の挙動を知りたい人は続きも読んでみてください。
まず、β69のインストールですが、β67をアンインストールしてからインストールします。Quicksilverを起動して⌘+' キーを押すか、Quicksiverの起動ウィンドウの右上の三角ボタンからPreferencesを選びます。

Preferencesウィンドウからuninstallボタンを選んでアンインストールします。(プラグインをいろいろインストールしている人は、Plug-insやTriggersのスクリーンショットを取ってからアンインストールするといいかもしれません)
Quicksilver β69のディスクイメージをマウントして、Quicksilverのアイコンをダブルクリックして起動します。インストールボタンを押してApplicationsフォルダにインストールします。インストール場所を変えたい人は別の場所を指定できるようです。

されでは、日本語名を持つアプリケーションを起動してみます。Calculatorをまずは英語で指定してみます。スクリーンショットはcalcまで入力した状態です。
Calculatorは候補に上がっていませんね。
次に、計算機と入力してみます。なんと、計算機.appが出てきました。日本語入力は、Google 日本語入力を使いました。画面の左下に変換ウィンドウが出てきてタブキーで選択しました。ことえりでは、日本語が入らず候補にも出てきません。

他にも、よく使うものとして、プレビュー(Preview)、ターミナル(Terminal)、システム環境設定(System Preferences)がありますが、どれも英語名では起動できず日本語名でしか起動できませんでした。
私にとって一番いいのは、英語名と日本語名の両方で起動できることです。少なくとも英語名で起動できないのは致命的なので、やはりβ67に戻しました。