【コラム】
今週、iTunes4がv4.0.1(Build117)にマイナーバージョンアップされた。著作権問題が指摘された共有機能に制限が加えられたこと以外、目立った変更点はないようだ。これで自宅のMacに蓄えたサウンドライブラリを出先から楽しむことはできなくなったが、そもそも外出する機会が少ないから関係ないか…トホホ。
さて今回は、OS Xに標準で収録されているシェル「zsh」を取り上げてみたい。シェルは"慣れ"が重要な意味を持つプログラムであり、機能の多さがすべてとは言えないが、zshには他のシェルの追随を許さないほどマニアックな機能が満載されている。"究極のシェル"という呼称は伊達ではないのだ。
zshをTerminalで使用するときには、通常のコマンドと同様に「zsh」と実行すればOK。これでzshの機能を利用できるが、毎回zshを利用するのならば環境設定を変更しておこう。メニューバーから[ターミナル]→[環境設定...]を選択し、表示されたダイアログボックスの[このコマンドを実行する]ラジオボタンを有効にしてから空欄に「/bin/zsh」と入力すればOK。これで、次回Terminalを起動したときにはzshが使用される。
なお、zshの起動時には、.zshenvや.zprofile、.zshrcといったログインスクリプトの有無が確認される。zshを常用する場合、ログインスクリプトを自分が使いやすいよう編集することは必須の作業となるが、その前にzshの主要な機能について説明しておきたい。まずは「賢いファイルの削除方法」から始めてみよう。
・ファイルの削除
拡張子を条件にファイルを削除するときには、findコマンドとrmコマンドを組み合わせることがオーソドックスな方法といえる。たとえば、カレントディレクトリ以下を削除の対象範囲とするとき、拡張子「*.aux」のファイルを1つ1つ確認しながら削除するには、「find . -name '*.aux' -ok rm {} \;」といった要領でコマンドを実行することになるはずだ。
しかし、zshならfindコマンドを使う必要はない。ディレクトリ名部分にワイルドカード「**」を指定すれば、カレントディレクトリ以下に存在するディレクトリ名を再帰的に補完してくれるのだ。つまり、前述のfindコマンドとまったく同じ処理を行う場合には、以下に示すとおりrmコマンドを実行すればいい。
○拡張子を条件にファイルを削除する
% rm -i **/*.aux
・賢いファイル名の指定方法
zshでは、ファイル/ディレクトリ名を柔軟に表現できる。機能の組み合わせ方次第では、かなりアクロバティックなことも可能だが、ここでは基本的な使い方をいくつか紹介するに留めたい。
まずは複数の条件をもとにファイルリストを表示する方法について。「.log」と「.aux」という2種類の拡張子を条件にする場合、パッと思い浮かぶのは「ls *.log *.aux」というコマンドラインだが、zshでそのように記述するのは野暮というもの。zshでは、候補を「( )」でグルーピングし、その間を「|」で区切れば、AまたはB…という条件で検索できる。
○拡張子「.log」と「.aux」のファイルを表示する
% ls *.(log|aux)
zshに予約された特殊文字(下表参照)を利用すると、属性情報を条件にファイルリストを表示することも可能だ。たとえば、シンボリックリンクのみ表示するには、次のようにコマンドを実行すればいい。実行形式のファイルならば「*(x)」、カレントユーザが所有するファイルならば「*(U)」といった要領だ。
○シンボリックリンクを一覧表示する
% ls *(@)
特定のファイルを例外として扱う機能も用意されている。「~」で始まる文字列を指定すれば、他の条件に一致していても除外することができるのだ。たとえば、前述した「ls *.(log|aux)」を実行するとき、以下のようにコマンドを実行すると、ファイル名が「mac」から始まるファイルを除いた拡張子「.log」と「.aux」のファイルが表示されることになる。
なお、zshのデフォルトでは、この機能を使用するためのオプション(EXTENDED_GLOB)が無効になっている。「setopt EXTENDED_GLOB」とし、機能を有効にしてからコマンドを実行しよう。
○拡張子「.log」と「.aux」のファイルを表示する(先頭が「mac」から始まるファイルを除く)
% ls *.(log|aux)~mac*
○zshに予約された主な特殊記号
| 記号 | 意味 |
| / | ディレクトリ |
| . | 通常のファイル |
| @ | シンボリックリンク |
| * | ディレクトリ以外の実行可能なファイル |
| r | 読み取り可能なファイル |
| w | 書き込み可能なファイル |
| x | 実行形式のファイル |
| U | カレントユーザが所有するファイル |
| u[ユーザ名] | 指定したユーザが所有するファイル |
| s | setuidされたファイル |
| ~ | 条件から除外する |
| ^ | 以降の指定を否定する |
| - | 次の指定にシンボリックリンクを含む |
| 【レポート】マカフィーの世界の専門家の意識調査「サイバー防衛報告書」とセキュリティソリューション [21:15 5/25] |
| アップル、Aperture 3.2.4を公開 - バグ修正、安定性向上など [20:51 5/25] |
| 【レポート】GTC 2012 - VGXでエンタープライズ環境でのGPU需要開拓を狙うNVIDIA [20:07 5/25] |
| デル、期間限定キャンペーンに特価アイテム追加、アップグレード無料も継続 [19:41 5/25] |
| 上海問屋、iPhoneとほぼ同じ薄さのバッテリ内蔵ヘッドホンアンプ [19:05 5/25] |
|
[9nine]制服姿見納め? セーラー服で登場も川島海荷「4人はコスプレ」 [19:15 5/27] エンタメ |
|
「NO.6」4巻は書き下ろしドラマCD付、木乃のサイン会も [18:49 5/27] ホビー |
|
[今週の新刊]マンガ大賞3回ノミネート「アイアムアヒーロー」 カープ愛「球場ラヴァーズ」も [18:33 5/27] ホビー |
|
「ゆりてつ」サイン会は作者と都電に揺られるツアー仕立て [17:45 5/27] ホビー |
|
【ネタバレもありの徹底解明コラム】『サザエさん』タマの意外な事実 [17:30 5/27] ホビー |