批量更新MAC OS X的地址簿

MAC OS X比较赞的一点就是,很多信息都是存储在SQLite数据库中的。例如地址簿,出于某些原因,可能我们经常需要批量处理或者导出地址簿。一个简单的方法是用第三方的软件,比如著名的Bentoo。Bentoo 4支持Lion,可以批量将地址簿导出为Excel,处理后再导入,这对熟悉Excel的用户来说是比较便利的。但Bentoo也有短板,现在导入Excel后分组会丢。我现在的需求就很简单,在每个号码前加一个“+”号,用Bentoo固然可以达到目的,但是重新分二十来个组,那是相当头疼的。所以,到了发挥数据库专长的时候啦。

首先,我们要判断好你需要更新的地址簿究竟是在本地,还是iCloud同步的。网上现在能搜到的很多相关帖子都是叫你去找 /Users/ern/Library/Application\ Support/AddressBook/AddressBook-v22.abcddb,实际上在Lion中这是本地的地址簿。如果你和我一样已经开始用iCloud管理,那么正确的地方是/Users/ern/Library/Application\ Support/AddressBook/Sources/下还有一个27F75012-xxxx-xxxx-xxxx-5B1F8CDXXXXX这样的目录,这下面的AddressBook-v22.abcddb才是我们的修改对象。让我们把这个文件拷贝一份出来作为备份。

其次,打开终端,开始操作(注意要选择你自己的文件,别照抄哦)

sqlite3 /Users/ern/Library/Application\ Support/AddressBook/Sources/27F75012-xxxx-xxxx-xxxx-5B1F8CDXXXXX/AddressBook-v22.abcddb

.table –这个语句可以看到地址簿的结构,有哪些表,从表名就可以看到我们的电话号码就在ZABCDPHONENUMBER里

.schema ZABCDPHONENUMBER  –这个语句同样没有实际用途,只是显示一下,这个表有哪些字段,我们现在需要的是其中ZFULLNUMBER,这个字段存放了实际的号码

update ZABCDPHONENUMBER set ZFULLNUMBER=”+”||ZFULLNUMBER where ZFULLNUMBER like ‘86%’; –这个语句是对86开头的号码前,加上一个加号。

.quit –退出SQLite

最后打开你的地址簿,在iCloud旁点击一下,应该就会开始自动同步啦。

相应的,也可以用类似的方法修改EMail地址(ZABCDEMAILADDRESS)等。SQL语句感觉和Oracle的语法类似,也比较灵活,各位尝试之前千万做好备份工作,SQLite没有commit一说哦,修改默认直接生效了,出错的话就只能靠Time Machine来恢复啦。

以上在MAC OS X 10.7.2下操作。