我在 .sh 文件中有这个命令
sudo find $PROJECT_ROOT -type f \
-exec sudo chmod ugo-x '{}' \; \
-exec sudo chmod go-w '{}' \;
如您所见,对于每个文件,我需要删除组和其他人的写权限,并保留用户的最终写权限。
并删除每个人的执行权限。
我问你有没有办法优化这个...我对 chmod 没什么经验,但这很耗时:每个项目文件夹需要 4-5 分钟,对于我们 41 个实际项目中的每一个,每周必须执行 2 次。(请不要问为什么,这并不重要,我必须这样做)
答案1
除了@Sisir的回答之外,您可以做的第一件事是在 find 命令中使用“+”而不是“;”。这使得它对所有匹配的文件运行一个命令,而不是每个文件运行一个命令:
sudo find $PROJECT_ROOT -type f -exec chmod a-x,go-w '{}' +
如果项目包含太多文件(命令行长度有限制),您仍然可以chmod
在每个目录中使用一个文件和一个小的附加脚本:
#! /bin/bash
# chmod's all files in the $1 directory
find "$1" -maxdepth 1 -type f -exec chmod a-x,go-w {} +
进而:
sudo find $PROJECT_ROOT -type d -exec chmod_script {} \;
(顺便说一句,我认为你不需要sudo
在执行的命令上find
,它通常应该继承的用户 ID find
?)
答案2
简化命令如下,然后检查是否提高了性能:
sudo find $PROJECT_ROOT -type f -exec sudo chmod a-x,go-w '{}' \;