当我将 USB 棒 (FAT) 插入我的 Mac 或 Ubuntu 机器时,所有文件都设置了可执行位。将目录结构复制到硬盘后,如何从文件递归删除可执行位并将其保留在目录中?
答案1
使用 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 *
(如果您还想在主目录中包含隐藏文件,您可能需要将 * 更改为 . (点),但这尚未测试。)
答案2
如果你首先进入正确的路径:
find . -type f -exec chmod -x {} \;
或者
chmod -x $(find . -type f)
find 查找路径 . 中所有类型为 'f'(即常规文件)的文件,然后对每个文件调用 chmod -x。{} 替换文件名,\; 终止 chmod 命令。
答案3
在 Linux 和 Unix 的终端窗口中,或者在 Mac OS X 上,在 Terminal.app 中使用以下命令:
find . -type f -print0 | xargs -0 chmod -x
答案4
这种chmod -x+X
方法在 ubuntu 上对我来说也不起作用,因此我编写了这个最小的 python 脚本:
#!/usr/bin/python3
import os
for par, dirs, files in os.walk('.'):
for d in dirs:
os.chmod(par + '/' + d, 0o755)
for f in files:
os.chmod(par + '/' + f, 0o644)
如果您的文件系统中可能有任何额外的东西(例如套接字),您可能需要用 try/catch 包围最后一个 chmod。