使用 find + chmod 批量修改目录或文件的权限
使用 chmod -R
递归修改权限的时候会把文件和目录的权限都修改了,可有时候我们只想修改目录的权限,便不能直接用 chmod -R
修改。由于 chmod
命令不支持分别对文件或目录进行操作,因此我们需要借助 find
命令来分别筛选出待处理的文件或目录,并通过 xargs
将需要修改权限的对象传递给 chmod
进行修改。
本文以分别将 /path/to/base/dir
目录下所有文件的权限指定为644,所有目录的权限指定为755为例。
# 修改目录权限
find /path/to/base/dir -type d -print0 | xargs -r -0 chmod 755
# 修改文件权限
find /path/to/base/dir -type f -print0 | xargs -r -0 chmod 644
理论上,本方法可适用于大量1文件/目录。 -r
2参数使得如果 find
没有找到符合要求的对象则 xargs
不会执行 chmod
命令。
参考文献
- How to recursively chmod all directories except files? - Super User
man find
man xargs
脚注
comment1864697_91938 by: Agargara ↩︎
等效于
--no-run-if-empty
,详情参考 xargs 手册。 ↩︎