シェルやコマンドは繰り返し使うことで手に馴染む、まさに道具のような存在なのだが、不慣れな人には「こういう場面でこれを使う」というシチュエーションを示したほうが理解しやすいはず。前回に続き「機能逆引き」の流儀に従い、OS Xに標準装備されているコマンドの知ってトクする使い方を紹介してみよう。

ファイルを開かず更新日だけアップデートするなら「touch」

作成したワープロ文書の最終更新日を同じにしたい、レタッチを施した写真の編集作業日を統一したい、と考えたことはないだろうか。対応する編集ソフトで開いて上書き保存する方法は思いついても、ファイルが複数になれば手間がかかるし、その編集ソフトが手もとにないという事態も考えられる。

そんなとき使えるコマンドが「touch」だ。使い方はかんたん、引数にファイル名を与えるだけでいい。内容には一切手を加えず、ファイルのタイムスタンプ(Finderでは「変更日」)をコマンド実行時点に更新できるので、編集ソフトの類いは必要ない。「*.doc」などとワイルドカードを使えば、同じ拡張子のファイルをまとめて処理することも可能だ。

$ touch file.doc

touchコマンドで更新する前後のファイル情報。「変更日」だけが変更されている

複数のフォルダの総ディスク消費量を知りたいときには「du」

あるフォルダがどれだけのディスクスペースを占有しているか調べたいとき、誰でもすぐに思い浮かべるのがFinderの情報ウインドウ。対象のフォルダを選択してCommand-iを押し、サイズ欄をチェックするという方法だ。しかし、対象が複数のフォルダになるとどうだろう。効率が悪くはないだろうか?

そんなとき利用したいコマンドが「du」。オプションに「-shc」を指定し、引数に対象のフォルダを列挙すればOK。ホームフォルダ直下にある書類フォルダであれば「~/Documents」、ミュージックフォルダであれば「~/Music」を指定すればいい。なお、「-s」はサブディレクトリを対象としないための、「-h」は人間が理解しやすい単位で表示するための、「-c」は容量の合計を計算するためのオプションを意味している。

$ du -shc ~/Documents ~/Music

複数のフォルダを対象とした総ディスク消費量をすぐに調べることができる

テキストファイルの文字数をカウントするなら「wc」

文章量を測る場合、ファイルサイズより文字数のほうがいい。ファイルサイズを基準にすると、テキストエンコーディング形式次第でマルチバイト文字のサイズが異なるため、どれだけの分量かわかりにくいからだ。

そんなときには「wc」コマンドを使おう。オプションに「-m」を指定し、引数に対象のファイル名を与えて実行すれば、そのテキストファイルに含まれる文字数が返される。ASCII文字もマルチバイト文字も同じ1文字としてカウントされるところがポイントだ。

しかし、問題が1つある。改行コードも1文字としてカウントされてしまうのだ。たとえば、改行コードが「LF」で100行のテキストファイルを測定すると、100バイトもの誤差が生じる計算となる。

この問題を解決するには、wcコマンドを実行するとき字数だけでなく行数もカウントして(-lオプションも指定)、その結果をawkコマンドにパイプし、字数から行数を差し引けばいい。改行コードが1バイト/1文字という前提ではあるが、UTF-8のテキストファイルならばこれでOKなはずだ。

$ wc -lm file.txt | awk '{print $2-$1}'

改行コードぶんを差し引いて、テキストファイル(UTF-8)の文字数をカウントできる

回文をつくるなら「rev」

竹藪焼けた、旦那がなんだ、確かに貸した……前から読んでも後ろから読んでも同じ文になる「回文」は、古くから言葉遊びに用いられてきた。完成度が高いものは一見してもそれとは気付かず、見過ごしてしまうほど。回文づくりを趣味にする人としては、してやったりの光景だろう。

この回文づくりをアシストするコマンドが「rev」だ。引数に与えたファイル、あるいは標準入力経由で受け取ったデータを逆方向に出力するだけのコマンドだが、回文づくりにはもってこい。以下のように、echoコマンドの引数として回文(世の中ね、顔かお金かなのよ)を与え、revコマンドにパイプすればテストするにはちょうどいいはず。なお、この方法は英語の回文にも利用できるが、単語の区切りを気にせずにすむ日本語のほうが効果を測りやすいのではないだろうか。

$ echo "よのなかねかおかおかねかなのよ" | rev

実際に利用するかどうかはさておき、回文が正しいかどうかの検証にも使えそうだ