Mountain Lion が発売されたので、早速インストールしました。Mountain Lion についてはいずれ別の機会でまとめます。今日はちょっとした自作のツールを一つ紹介します。
Mac のファイル管理について
以前はファイルを項目ごとにフォルダに整理して管理していました。これも一長一短でコウモリ問題などが発生し、ファイルをどこに保存したのか忘れ、探し回る日々を過ごしていました。
しかしながら、Mac に Spotlight が搭載されてからは、ファイルがどこに保存されていても瞬時に表示されるため、そこまでフォルダ分けを気を使う必要がなくなりました。ただし、その代償として「ダウンロード」フォルダにファイルが溜まり続け、見るも無残な状態に成り下がっている人が多いのではないかと思います。適当なタイミングで断捨離をするのですが、数が多いと滅入りますし、いちいち選ぶのも面倒です。
また、rMBP は研究連絡で持ち運びたいため、職場の個人情報は極力持ち歩きたくありません。そのため、職場の授業などの情報は研究室の iMac ですべて管理し、教務室の rMBP からリモートデスクトップを使ってアクセスする形を取ろうと思っています(afp 共有でもいいのですが、せっかくのバージョン管理機能が使えないので悩み中)。
問題なのは、メールで来る情報です。これらをいちいちリモートデスクトップで処理するのはかなり面倒なので、一昨日書いたように IMAP 接続にして、rMBP でも読めるようにしました。様々な提出書類などがメールで寄せられるため、ダウンロードフォルダは職場の情報で溢れかえります。そこで、いつものごとく手抜きのスクリプトを作ってみました。設計指針は以下のような感じです。
- iMacでは以下のようなフォルダ構成を取ります
- by_kind
- 00.jugyou.localized (Finder からは 「00.授業」と見えます)
- 001.ip1.localized (Finder からは 「001.情報処理I」と見えます)、以下授業分続きます
- 01.jimu.localized (Finder からは 「01.事務」と見えます)、重要な事務書類で分類分けが可能で頻繁に使うものだけを入れます。
- 00.jugyou.localized (Finder からは 「00.授業」と見えます)
- by_year
- 2011
- 2011_12
- 2011_12_15
- この日に作成したファイルを入れます
- 2011_12_15
- 2012_01
- 2012_01_10
- この日に作成したファイルを入れます(年度なので2011フォルダに入れます)
- 2012_01_10
- 2011_12
- 2011
- by_kind
- by_kind には、種類のまとまりが強いもの、重要なもの、年度を超えて使うものなどを入れます。こちらは手動で分類します。一方、とりあえず保管するものは by_year の下に上記の構成でいれます。
- 手動でフォルダを作ったりするのは非常に面倒なので、後者の処理を自動化します。
- この手の仕事はスクリプトで書くのが便利ですが、ファイル名の指定が面倒です。そのため、いつもの Automator を使います。
move_ymd Automator アプリの作成
- Automator を起動します
- 「選択された Finder 項目を取得」「シェルスクリプトを実行」を並べます。シェルスクリプトとして今回は /usr/bin/ruby を使います。以下のような感じになります。
- 見にくいのでスクリプトを書き出してみました。こちらは、教務室の rMBP から使う場合のスクリプトです。あらかじめ、iMac のホームをマウントしておきます。なお、研究室の iMac でも同じスクリプトを使いますが、ローカルファイルへのアクセスになるので、Heading の Volumes のところを Users に変更します(自動判別してもいいんだけど……)。
require 'FileUtils' Heading = '/Volumes/hkob/by_year' LogFile = "#{Heading}/move_ymd.log" if File.exists?(Heading) file = open(LogFile, "a") do |file| ARGF.each do |f| fn = f.chomp d = File.mtime(fn) yn = d.strftime("%Y").to_i mn = d.strftime("%m").to_i yn -= 1 if mn < 4 y = "#{Heading}/#{yn}"; Dir.mkdir(y) unless File.exists?(y) ym = d.strftime("#{y}/%Y_%m"); Dir.mkdir(ym) unless File.exists?(ym) ymd = d.strftime("#{ym}/%Y_%m_%d"); Dir.mkdir(ymd) unless File.exists?(ymd) FileUtils.mv(fn, ymd); file.print "#{fn} -> #{ymd}\n" end end end