批量解除Mac还原后的文件锁

Post by zerob13

最近重新还原了下系统,然后出现了一个很坑爹的情况,如下图:

Screen Shot 2013-09-07 at 1.32.38 PM

坑爹啊,这是什么玩意!!!!仔细一看原来是文件被lock住了,分析了下这是和 Time Machine 有关系的,貌似超过一定时间没动的文档就会被locked,如果只是一般的文档也就算了,其实很多配置文件甚至本地缓存文件都被lock住,出现的现象就是每次打开finder都会转菊花一会儿。总之,就是用户目录下一堆文件被locked住了,要是手动一个个改回来估计会吐血,那么做为程序员自然会想想解决办法。

首先分析下,locked这个属性貌似linux下面没接触到过,估计是mac自己有的一个文件tag,所以去查了查资料,原来是一个 flag 叫做 uchg,只要把相关文件的 flag 重置到 nouchg 就解决问题了。

那么我们来查找这些文件吧,代码如下:

find /Users/youraccountname/ -flags uchg > lk.txt

我把列表重定向到了一个文本里面,方便后续处理。中途有个小插曲,我输入命令后给我回复了一条:

find: unknown predicate-flags'`

仔细一看发现是我的 find 默认指向了brew 安装的gfind,所以不支持这个参数,简单,输入:

brew remove findutils

卸载,或者直接强制指定系统默认的 find 的位置来执行就行,系统默认 find 在

/usr/bin/find

那么,到现在,我们得到了一个lk.txt文件,里面列出来了你名下的所有的 locked 文件,之后我们怎么办呢?再次求救万能的 Google 搜到了一条命令

chflags -R nouchg /PATH/TO/DIRECTORY/WITH/LOCKED/FILES/

这就可以把文件解锁了,对于这个命令的解释,后面相关连接里面有介绍,有兴趣的可以看一下。

最后我把这些操作打包成了一个 shell 脚本,方便自己以后使用。脚本还有个可以改动的地方,我还是把文件列表输出到磁盘,因为我希望看到哪些文件被修改,如果你不希望,你可以直接在内存里面重定向,这样速度应该还会快上那么一点点。

!/bin/sh find /Users/zerob13/ -flags uchg > lk.txt while read -r line do echo "$line" chflags -R nouchg "$line" done 相关连接

Find locked files in Mac OS X (via Terminal)

Command to unlock “Locked” files on OS X