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! 搞定。


macOS

922 字

2018-06-26 07:03 +0000