mac下修复文件和目录为正常权限
昨天误删了macbook上smslit
用户下好多东西,无奈新建了一个用户5km
,在删除原用户目录前,将重要的文档拷贝到了移动硬盘,然后进入新用户中,把文件从移动硬盘拷贝到用户目录下,结果今天ls
查看文件的时候发现权限不对呀,所有的文件和目录权限都变成了777
。
就像下图中的样子,糊了一片骚黄,好扎眼,权限肯定不对呀,而且这只是目录,ll
查看其中目录下的文件,咋还都有了运行权限,红呼呼一条条的,现在想想,好像之前和朋友vimux就注意到过这个问题。必须解决一下了。
文件的正常权限
在这之前,十里只知道怎么查看文件权限以及它们代表的意思,正常文件和目录的权限过去没关注,好惭愧-_-!!!。
其实也不难,新建一个文件和目录,看一下就知道了:
➜ Documents touch newfile && mkdir newdir && ll
那么正常权限:
- 文件:
-rw-r--r--
也就是644
- 目录:
drwxr-xr-x
也就是755
修复权限
思路很简单,查找目录下所有文件修改权限为644
,查找目录下所有目录修改权限为755
,这里使用find
命令按类型查找,然后根据类型使用chmod
命令对应修改权限。
-
修改所有文件权限:
➜ Documents find . -type f -exec chmod 644 {} \; # 也可以使用 find . -type f -print0 | xargs -0 chmod 644
-
修改目录权限
➜ Documents find . -type d -exec chmod 755 {} \; # 也可以使用 find . -type d -print0 | xargs -0 chmod 755
上述命令中利用
find
命令的-type
指定类型,-exec
以find的一条输出作为chmod
的参数。- ➜后面的关键字,代表的是当前工作目录,再后面才是命令
- 在上面的每行命令下面的注释中是另一种实现方式,其中
-print0
和-0
表示可以处理名称带空格的文件和目录。
封装
为了更方便一些,可以写一个shell脚本,传入一个路径作为参数,就可以修复指定路径下文件和目录的权限了。
脚本内容
十里编写了脚本fixpermissioin
如下:
#!/bin/bash
helpinfo() {
echo -e "Usage:\n $0 dirname\n - dirname is a path"
}
# 判断参数
if [ $# != 1 ];then
helpinfo
exit 1
fi
# 判断目录是否存在
if [ ! -d $1 ]; then
echo -e "$1 does not exist!\nPlease enter a valid path name!"
helpinfo
exit 1
fi
# 修复目录下文件和目录的权限
echo "Fix permission of files ..."
# find $1 -type f -print0 | xargs -0 chmod 644
find $1 -type f -exec chmod 644 {} \;
echo "Done!"
echo "Fix permission of dirs ..."
# find $1 -type d -print0 | xargs -0 chmod 755
find $1 -type d -exec chmod 755 {} \;
echo "Done!"
脚本权限
为脚本添加运行权限:
chmod +x fixpermissioin
测试脚本
➜ /tmp ./fixpermission
Usage:
./fixpermission dirname
- dirname is a path
➜ /tmp ./fixpermission ~/Downloads/applications/
Fix permission of files ...
/Users/5km/Downloads/applications//pap.er_v3.2.dmg
/Users/5km/Downloads/applications//.DS_Store
/Users/5km/Downloads/applications//PicU-1.54.dmg
/Users/5km/Downloads/applications//Dash_4.2.0_[TNT].dmg
Done!
Fix permission of dirs ...
/Users/5km/Downloads/applications/
Done!
总结
Peace! 搞定。