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
+ exec
s。如果不是,请使用find ... -print0 | xargs -0 ...
。
find . -type f -perm +111 -exec chmod -x {} \;
find
支持,-print0
我很确定它也将支持-exec