しばらくお休みしていた連載を再開して半年、ようやく以前のペースを取り戻しつつあります。毎週テーマを決めて素材を揃える作業はツラいですが、Appleが次々に新製品・新サービスを投下してくれますからね、ありがたいことです。ともあれ、来年も引き続きよろしくお願いします。
さて、今回は「ファイルの削除」について。年末といえば大掃除、家の中をキレイにして新年を迎えるものだが、Macとて同じこと。せめて年1回は不要なファイルを削除してスッキリすべきだ。なお、事故防止のため、事前にTime Machineでバックアップしておくことを強くお勧めする。バックアップさえあれば、より大胆に"大掃除"を決行できるはずだ。
手始めはGUIツールで
「大掃除しろ」と大上段からいわれても、なにから手をつけてよいのやら……そんな人にお勧めのツールが「Disk Inventory X」だ。OS X Lionでも支障なく動作するが、環境設定パネルからインストールできる付属のFinderプラグインが動作しない(FinderプラグインはSnow Leopardで廃止された)点には留意しておきたい。
○ Disk Inventory X
http://www.derlien.com/downloads/index.html
このツール、起動すると自動的に起動ボリューム上のサーチを開始し、ファイル種別ごとに分類表示してくれる。種類といっても拡張子別ではなく、JPEGやPNG、PDFなどの「プレビューDocumnet」や、オフィス書類やテキストファイルといった「Document」のように大まかなものだが、ディスクの消費状況を一目で把握できる。
削除の手順だが、メニューバーで「Window」→「Show Selection List」を選択し、ウインドウ下に現れたシートにあるプルダウンでファイル種別を選択する。ここから先はファイルフォーマットに関する知識を要求されるが、「Disk Image」や「ZIP archive」などの文字を頼りに、削除して支障なさそうなものを選ぼう。そして削除対象のファイル上でコンテキストメニューを表示し(「Control」+クリック)、「Move To Trash」を選択すれば削除完了だ。
コマンドラインで徹底的に
GUIツールは扱いやすいが、"一括削除"には適していないように思う。先ほど紹介した「Disk Inventory X」も、ディスクの使用状況を可視化するのはいいとして、複数のファイルを選択して削除する機能はなく、フォルダ構造を再帰的に削除することもできない。今回は大掃除が目的なのだから、まとめてバッサリ削除できるほうが好都合なのだ。
となれば、当コラムではTerminalの出番となる。まずは、以下のコマンドラインを試してほしい。findコマンドを使い、カレントディレクトリ以下の領域を対象に(.)、ファイルであることを条件とし(-type f)、末尾が「.log」という名前のファイル(ワイルドカード「*」を使いログファイルに使用される拡張子を表現)を検索する。末尾の「-print」は、後述するxargsコマンドに備えてのものだ。カレントディレクトリをホームフォルダにしたうえで実行してみよう。
$ find . -type f -name '*.log' -print0
おそらく、パスに「/Library/Logs/」を含む大量のファイルがヒットしたことだろう。その内容を大まかに確認し、問題なければ削除決行だ。シェルのコマンド履歴機能(「Control」+「P」)を使い、直前に実行したコマンドラインを呼び出して、末尾に「| xargs -0 rm」を追加したうえで実行すればいい。これで、先ほど表示されたログファイルはすべて削除される。
$ find . -type f -name '*.log' -print0 | xargs -0 rm
追加した文字列は、findコマンドの実行結果をxargsコマンドにパイプするためのものだ。xargsコマンドは、標準入力から引数を読み込み指定のコマンドを実行する働きを持つ。今回示したコマンド実行例では、findコマンドの検索結果をフルパスでヌル文字をくわえて標準出力へアウトプットし(「-print0」オプションの働き)、それを受けるxargsコマンドでは文字列の区切りにヌル文字を使用している(「-0」オプションの働き)。なぜこのような手間をかけるかというと、OS Xではファイル名にスペースを含むことが多いからだ。
このコマンドラインは、いろいろなファイル種に応用が利く。拡張子を把握していることが前提条件だが、JPEGやPNGなどの画像ファイル、WordやExcelといったオフィス文書は、改めて説明するまでもないだろう。筆者は「-name '*~'」として、Emacsにより生成されたバックアップファイルを一括削除するときに利用しているが、「-name '.DS_Store'」のようなドットファイルの削除にも使える。年末の大掃除に、ぜひ活用してほしい。