一般我是從 Outlook Express 裡利用 IMAP 到我的 server 裡看信,這樣子的好處便是,當我手邊沒有 NB 可以看信時,我還可以透過 OpenWebMail 看信,或是進 shell 用 mutt 看。為了保險起見,我仍然是採用 mbox 的格式儲存各個信件夾。這樣子的代價就是,效率慢了些,而且,有時候會碰到一些 scalability 的問題。

最近我正是碰到了這麼樣的一個問題。我有一個信件夾叫 nl.life,專門放 procmail 幫我過濾出來的,歸類為 life 類的電子報 (News Letter)。因為太久沒有整理,這個信件夾積了六千多封信,結果即使在 LAN 裡,我用 Outlook Express 透過 IMAP 開這個信件夾,仍然會發生 time-out。解決的方法就是,改進 shell 用 mutt 整理。

不過,我一向只會用 Outlook Express 拖拉移動信件,在 mutt 裡我只會一封一封先 copy 再 delete 以達到 move 的目的。六千多封信,要一封一封分兩段先 copy 再 delete,那可真會是弄到瘋掉。除非,我學會怎麼用 mutt 批次進行 move folder 的動作。

花了好多時間,用 Google 實在是找不到怎樣善用 mutt。還好,最後找到了 MuttWiki 這個站裡面的 FAQ,在裡面找到這條 entry:《How do I save/delete/copy/print/pipe multiple messages?》,解決了我的問題。

以下整理操作方法如下:

  1. 先使用大寫 T 利用 pattern 依據日期規則,tag 信件。日期的 pattern 寫法為 ~d <min-date>-<max-date>,其中,<min-date> 與 <max-date> 的語法皆是「日/月/西元年」。好比說,我要標記 2005 年 4 月份的所有信件,便這麼下 pattern:~d 1/4/2005-31/4/2005。日期稍微有點不正確沒關係,這樣我們可以省下弄清楚每個月有幾天的功夫。
  2. 接著利用 ; 指令,將跟著而來的指令,改施行到被 tag 的那些信件。對於 mutt 來說,所謂的 move 信件,其實就是 save 信件。Save 用的指令是 s,所以我們這麼打:「;s」,然後輸入信件夾路徑即可。
  3. 最後,那些被 save 到指定信件夾的信件,會被 mutt 自動標記成 mark deleted,這時,我們可以用 $ 指令,執行真正的 delete 動作,將目前信件夾變小,加速後續動作的執行。

從公司要透過 MUA 連回家裡的 server 看信,還是很慢。既然現在 mutt 越來越會用了,mutt 對我的方便性就大增許多。