数年前、Pythonスクリプトを使ってアーカイブされたiChatをiChat仲間の名前に基づいてサブフォルダに整理するヒントを実行しました。当時、AppleはアーカイブされたiChatをすべてユーザーの「書類」フォルダ内の「iChats」フォルダの最上位にまとめて保存していたため、このスクリプトが必要でした。私の場合、そのフォルダには文字通り何千ものファイルがあり、目的のファイルを見つけるのが非常に困難でした。スクリプトを数回実行して整理しましたが、時間が経つにつれて、フォルダには整理されたチャットアーカイブと整理されていないチャットアーカイブが混在するようになりました。
数年が経ち、OS X 10.5が登場しました。300もの新機能に加え、iChatのアーカイブがiChatsフォルダ内の日付別サブフォルダに分類されるようになりました。これによりフォルダが整理されましたが、チャットは日付ではなく、相手の名前で整理されていた方が良かったと思います。
しかし、私にとっては問題もありました。10.5 をクリーンインストールしたので、以前の iChats フォルダが 10.4 のパーティションに存在し、そこには何千もの、名前順に整理されたアーカイブと整理されていないアーカイブが混在していたのです。そして、今整理された iChats フォルダも 10.5 には存在していました。Spotlight は iChat アーカイブに隠された豆知識を検索するときにファイルの場所をあまり気にしませんが、私はすべてを一つの整理されたフォルダにまとめたかったのです。主に見た目上の理由ですが、10.4 パーティションを他の用途のためにゼロクリアしたかったのも理由です。しかし、アーカイブのサイズを考えると、それを新しい 10.5 風の日付付きフォルダに整理するのは至難の業でしょう。
通常、ヒントの中では、ここで解決策を提示し、その仕組みを詳しく説明します。しかし、時には、私の能力では到底説明しきれないような内容の解決策も存在します。今日のヒントもまさにその例です。この解決策は、iChatフォルダを日付付きのサブフォルダに魔法のように分類するPerlスクリプトです。以前は名前付きサブフォルダに整理されていたiChatアーカイブを移動させることさえできます。私のPerlスキルはせいぜい初歩的なレベルなので、今日のヒントでは「仕組み」についての説明はあまり省いています。(このスクリプトはmacosxhints.comサイトの読者が作成してくれました。)
コードは長いので、コピー&ペーストしやすいように専用のページを設けました。まだコピーしていない場合は、そのページのテキストをコピー(全選択し、Command+Cキーを押す)し、「ターミナル」を起動してください。ターミナルでテキストエディタnano movechatsを開いてくださいnano。Command+Vキーを押すと、コピーしたテキストがテキストエディタに貼り付けられます。iChatフォルダをデフォルトの場所に保存しておけば、編集はこれで完了です。スクリプトの保存に関するセクションまで飛ばしてください。ただし、iChatログをユーザーの「書類」フォルダに保存していない場合(または私の場合のように、10.4のフォルダでプログラムを実行している場合)、スクリプトの以下の行も編集する必要があります。
open(FIND, "find '$ENV{HOME}/Documents/iChats' -name... をiChatsフォルダ(または任意の名前)のフルパスに置き換えてください。例えば、iChatsを別のボリュームに保存している場合、この行は次のようになります。パス内のスペースの前にバックスラッシュがあることに注意して$ENV{HOME}/Documents/iChatsください。
open(FIND, "find '/Volumes/10.4 system/iChat Archives' -name...
スクリプトはデフォルトのフォルダーではなく、そのフォルダーで実行されます。
スクリプトの保存:編集が完了したら、Ctrl+Xを押してエディタを終了します。Ctrl+Xを押すと、nano変更を保存するかどうか尋ねられます。Yを押し、Enterを押してファイル名を確定します。これでスクリプトはユーザーのホームディレクトリに保存されました。
ただし、このスクリプトを使用するには、実行可能ファイルである必要があります。実行可能にするには、入力しchmod +x movechatsてEnterキーを押してください。スクリプトを使用する前に、万が一の事態に備えてiChatsフォルダをバックアップすることをお勧めします。FinderでOptionキーを押しながら、ユーザーの「書類」→「iChats」フォルダを別の場所にドラッグしてください。Optionキーを押したままにすると、システムが強制的にコピーを作成します。
完了したら、ターミナルに戻り、入力し./movechatsてEnterキーを押します。心配しないでください。まだ何も起こりません。代わりに、次のような出力が表示されるはずです。

スクリプトをデフォルトの形式で実行すると、スクリプトが何を行うかが表示されますが、実際には実行されません。スクリプトが移動するチャットアーカイブごとに1行の出力が表示されます(ただし、ターミナルウィンドウが非常に広い場合を除き、上記のように2行に折り返される可能性があります)。また、スクリプトが作成するディレクトリごとにエントリが表示されます(mkdir...)。スクリプトの実行が完了したら、この出力に目を通し、すべてが正しく行われていることを確認してください。
すべてが正しく表示されていることを確認したら、スクリプトを で再度編集しますnano movechats。ファイルの3行目にある を にmy $PREVIEW = 1;変更します。この行のコメントに記載されているように、この値を0に設定すると、スクリプトはプレビューモードではなく操作モードになります。Ctrl+X、Y、Enterキーをもう一度押して変更を保存します。最後に、スクリプトを再度実行し()、スクリプトが完了したらiChatsフォルダを確認してください。整理されたフォルダになっているはずです。10./movechats
古いiChatアーカイブフォルダでスクリプトを使用した場合は、その内容を10.5のiChatフォルダにドラッグして、1つのフォルダに統合できます。ただし、2つのフォルダ間で日付が重複していないことを確認してください。重複している場合は、新しいアーカイブのその日付のエントリが古いアーカイブのエントリで上書きされないように、フォルダの内容を手動で移動する必要があります。
これは 1 回限りの使用のスクリプト (10.5 のチャットは自動的に正しくファイルされます) なので、実行後はスクリプトを削除できます (または、将来使用するために保存フォルダーに移動できます)。