Mac OS Xの魅力の一つは、UNIXなところです。

Mac固有の仕様もあるとはいえ、それなりにオーソドックスなUNIX環境として、普通にばりばりシェルで作業しているかたも多いとは思います。一方で、MacらしくGUIでの操作も行うわけで、そういう両方を行き来する人にとってシェルのコマンドを覚えることは結構、重要なポイントではないでしょうか。

このエントリーでは僕が愛用しているMac固有のコマンドのなかでも、管理系じゃない、普段使いに便利なコマンドを紹介します。

pbcopy, pbpaste - コピー&ペースト

まずはコピー&ペーストのやりとりをシェルで行うコマンドです。使いかたは簡単でパイプでやりとりするだけです。

pbcopyはコピーを実行します。次の例では、hello.txtというファイルの中身をcatで読みこみパイプでpbcopyへ渡します。

$ cat hello.txt | pbcopy

pbpasteはペーストです。次の例では、ファイルresult.txtにペーストしているだけです。

$ pbpaste > result.txt

ちなみに接頭辞のpbは paste board の略です。クリップボードの別のいいかたですね。

say - テキスト読み上げ

次は say です。これはテキストの音声を読み上げてくれるコマンドです。

使い方は簡単。次のようにテキストを渡すだけ。

$ say hello

声の指定は -v オプションで行います。

$ say -v Alex hello

インストールされている声の一覧は ? を指定して次のようにすれば表示されます。

$ say -v ?

もっと凝ったこともできます。次の例では、「こんにちは」という音声をhello.mp4に書きこんでくれます。

$ say -v kyoko --file-format mp4f -o hello こんにちは

シェルスクリプトを書けば、いろんなことが自動化できそうです。

まあ、普段使いとしては、ソースをコンパイルするときに最後に

$ say complete

としておくと音声で完了をお知らせしてくれて便利ですよ。

open - ダブルクリック相当

openは、Finderでダブルクリックしたときの挙動をシェル上で実行できます。

次の例では、普通はプレビューアプリでdocument.pdfが開くはずです。

$ open document.pdf

シェルからMacのアプリを起動することもできます。

$ open /Applications/Emacs.app

オプション付きで実行することもできます。次の例ではEmacs.appを–debug-initを有効にして起動させています。

$ open /Applications/Emacs.app --args --debug-init

Emacsを使っている場合はDiredと組合せると便利です。 例えば、次のようなDiredバッファ上で、任意のファイルへカーソルを移動して!キーを押します。

  /Users/foobar:
  total used in directory 2168 available 1035180
  drwxr-xr-x@ 32 junichi  staff     1088  7  3 22:09 .
  drwx------@ 52 junichi  staff     1768  7  3 22:08 ..
  -rw-r--r--@  1 junichi  staff     6148  6 25 14:26 .DS_Store
  -rw-r--r--@  1 junichi  staff      644  7  2 13:34 document.pdf
  -rw-r--r--@  1 junichi  staff     1149  7  3 17:28 image.png
  -rw-r--r--@  1 junichi  staff       96  3 11 17:37 hello.txt

すると次のように聞かれるのでopenを入力すれば、Macの関連付けでファイルを開けることができます。

! on document.pdf: <b>open </b>

qlmanage - クイックルック

クイックルックとは、Finder等でファイルを選択してSPACEキーを押すとファイルを開けなくても中身を確認できるやつですね。

qlmanageとは、クイックルック用サーバーの管理と、開発者向けのデバッグ機能を提供するコマンドのようで通常使うことはありませんが、唯一、プレビュー機能も実行できるようになっているので、それだけ利用させてもらいます。

次のように -p オプションを指定し、実行することで、SPACEキーを押したのと同等のウィンドウが開きます。

$ qlmanage -p document.pdf

ただ、エラーメッセージがでてしまうのが気になりますが。。。

mdfind, mdls - Spotlight検索

mdfindとは、Spotlightと同等の検索を実行できるコマンドです。

使いかたは単純に

$ mdfind document

のようにすればいいだけで、ポピュラーなfindやlocateと似たような使いかたができます。

どのフォーマットが対象なのかわかりませんが、テキストの全文検索もできます。

$ mdfind ジョギング

locateはファイル名の検索のみで、Macだと微妙な挙動な気がしてちゃんと使えてません。 findはオプションのつけかたでなんでもできる万能選手ではありますが、それなりに難しい。

その点、mdfind はメタデータを検索するだけなので使いかたも単純です。テキストの全文検索もできます。。(正直、そこまでやってくれてると思ってませんでした。。。) locateと同様に、直接ファイルを参照する代りに専用のデータベースを参照する方式なので、データベースを構築する作業が必要になるデメリットがありますが、その分、動作は軽いです。

クエリーを指定することでメタデータの属性を検索条件にすることもできます。

例えば、文書の作成者で検索してみたり

$ mdfind "kMDItemAuthors == '*人名*'"

富士フィルムのカメラで撮影した画像だけをリストアップしたり

$ mdfind "kMDItemAcquisitionMake == '*FUJIFILM*'"

モーツァルトの作曲した曲だけをリストアップしたり

$ mdfind "kMDItemComposer == '*Mozart*'"

といったことがコマンドラインからできてしまいます。

どんな属性があるかを知るには

$ mdimport -A

とすることでわかります。

mdfindの他に、mdlsというコマンドもあります。これはファイルのメタデータ一覧を表示するコマンドです。

$ mdls document.pdf

とすることでファイルのメタデータを見ることができます。どの程度、活用できるかはわかりませんが、mdfindのクエリーを考えるのに参考になります。

他にもmd-で始まるコマンドにmdutilがありますが、管理系なので省略します。mdworkerという重要なプロセスを管理します。

さいごに

詳細は各コマンドのmanページを参照してください。たくさんのオプションがまだまだ用意されていて奥が深いです。