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! 搞定。
很好对解决了 我的问题,赞!
重现场景是:有洁癖,全新装系统了, 文件是考过来的
很好对解决了 我对问题,赞,重现场景是有洁癖新装系统了, 文件是考过来的
测试
@Anonymous
我有邮箱
v1.5.2