请求帮助优化这个耗时的查找,每个文件使用两个 chmod 命令

请求帮助优化这个耗时的查找,每个文件使用两个 chmod 命令

我在 .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 '{}' \; 

相关内容