シェルやコマンドは繰り返し使うことで手に馴染む、まさに道具のような存在なのだが、不慣れな人には「こういう場面でこれを使う」というシチュエーションを示したほうが理解しやすいはず。実は14年超という長期連載の当コラムだが、なぜかこれまで取りあげてこなかった「機能逆引き」の方法で、コマンドの使い方を紹介してみたい。

文書にカレンダーを貼り付けるときには「cal」

仕事のスケジュール調整などで利用する機会が多い「カレンダー」。ふだんはGUIアプリケーションの『カレンダー』を使うにしても、メールやワープロ文書で参照したいとき、相手に見せたいときには、スクリーンショットを撮るなどの手間がかかる。それに、カレンダーを加工したい/なにか書き込みたいときにはテキストのほうが好都合。なにかいい方法は……。

そんなときには、次のコマンドラインを実行しよう。当月のカレンダーがクリップボードに保存されるので、あとは適当なアプリ/文書に移りペーストすればOK。字体を変えたり色を変えたり使いかたは自由自在、あとはお好みでどうぞ。

$ cal | pbcopy

「「cal -m 3 \| pbcopy」で2016年3月のカレンダーをクリップボードに取り込み、それをメールに貼り付けたところ。自由に加工できる点がうれしい

文字コードを変換するなら「pbpaste」

OS Xには、テキストエンコーディング形式(文字コード)を変換するためのコマンド「iconv」が用意されている。たとえば、シフトJIS(CP932)で符合化された「before.txt」というテキストファイルは、以下のとおり実行すると、UTF-8で符合化された「after.txt」に変換できる。しかし、書式が覚えにくいのか、このコマンドラインはTerminalビギナーに不評だ。

$ iconv -f cp932 -t utf8 before.txt > after.txt

UTF-8になりさえすればいいと実利を追求するのであれば、「pbpaste」コマンドを使おう。適当なアプリで必要な範囲をコピーし、その状態で以下のとおりファイル(例では「utf8.txt」)にリダイレクトすればOK。クリップボードのテキストをpbpasteコマンドで取り出すとき、UTF-8に自動変換(実際には「~/.CFUserTextEncoding」で定義)されるしくみを応用しただけだが、短いわりに効果的なコマンドラインだ。

$ pbpaste > utf8.txt

クリップボードの内容をそのままリダイレクトするだけだが、UTF-8に変換するならばこれだけでOK

ZIPにパスワードを設定するなら「zipcloak」

Finderには、書庫作成/圧縮機能がある。選択したファイル/フォルダをまとめてZIP化できるため、重宝しているユーザは多いはずだ。しかし、パスワードを設定する機能は搭載されていないため、ZIPファイルを保護したいときはサードパーティー製のユーティリティに頼らざるをえない。

OS Xには「zipcloak」というコマンドがあり、引数にZIPファイルを与えるだけでパスワードを設定できるのだが、Finderで作成したZIPファイルはうまくいかない。これは「.DS_Store」などドットファイルの扱いを想定していないためで、「Local Entry CRC does not match CD」というエラーメッセージが続々表示されるはずだ。

zipcloakコマンドでパスワードを設定しようとすると、このようなエラーが現れることがある

その場合、以下のとおりzipコマンドでドットファイルを取り除こう。これで「Local Entry...」エラーは現れなくなり、zipcloakコマンドを利用したパスワードの追加もうまくいく。なお、Finderではなくzipコマンドで作成したZIP書庫は、ドットファイルを取り除かなくてもパスワードを設定できる(HFS+以外のファイルシステムで作成したものを除く)ので、最初からTerminalで作業したほうが効率的かもしれない。

$ zip --delete [ファイル名] "*__MACOSX*" "*.DS_Store"
$ zipcloak [ファイル名]
Enter password: 
Verify password:

○日後の日付と曜日を調べるなら「date」

GUIアプリケーションの『カレンダー』はよくできているが、「○日後は何月何日か」や「○日後は何曜日か」といった情報は調べにくい。たとえば、SIMロック解除の受付開始は購入から180日後といわれても、何月何日何曜日のことやら、すぐにはわからない。

そんなとき便利に使えるのが「date」コマンド。作業日から180日後の情報を調べたければ、以下のとおり「-v+180d」の要領でオプションを指定すればいい。月や曜日まで、瞬時に確認できるはずだ。

$ date -v+180d

180日後は何月何日何曜日なのかが瞬時にわかる

○月△日を基準として□日後を調べたいという場合は、「-f」オプションでフォーマット定義したうえで日付を指定する。たとえば、2015年9月25日から180日後であれば、以下のとおりコマンドを実行すればOK。9月は「09」のように2桁で表記する点に注意してほしい。

$ date -j -v+180d -f %Y%m%d 20150925

iPhone 6s/6s PlusのSIMロック解除受付開始日も瞬時に計算できる