Answers:
使用GNU chmod(在Ubuntu上)单个命令变体(从当前目录开始):
chmod -R -x+X .
说明:
-R -递归操作-x -删除所有用户的可执行标志+X -如果是目录,则为所有用户设置可执行标志在这种情况下,大写字母X仅适用于目录,因为所有可执行标志都已用清除-x。否则,+X如果最初为用户,组或其他用户设置了标志,则还要设置可执行标志。
使用BSD chmod(Mac OS X中提供),您必须通过两个命令分别进行操作:
sudo chmod -R -x * && sudo chmod -R +X *
(如果还要在主目录中包含隐藏文件,则可能需要将*更改为。(点),但未经测试。)
chmod -R a-x+X *
umask不允许x所有人使用,可能会发生这种情况。您使用默认umask还是更改了默认设置?您能发送umask命令输出吗?除了您的解决方案之外,还有这种可能性:chmod -R a-x,+X *它将x根据您的设置权限umask。我将更新答案,但我想首先检查BSD / Mac OS X中的行为。
find在下面结合简单的工具,一件事做好,它的风格答案变种。
.代替*
如果您首先进入正确的路径:
find . -type f -exec chmod -x {} \;
要么
chmod -x $(find . -type f)
查找在路径中找到所有类型为'f'的文件(即常规文件)。然后在每个文件上调用chmod -x。{}代替文件名和\; 终止chmod命令。
find支持,请使用-exec ... \+代替-exec ... \;-它需要更少的fork+ execs。如果不是,请使用find ... -print0 | xargs -0 ...。
find . -type f -perm +111 -exec chmod -x {} \;
find支持,-print0我很确定它也将支持-exec