![用于递归地遍历目录并根据文件类型条件进行 chmodding 的 Shell 脚本](https://linux22.com/image/23368/%E7%94%A8%E4%BA%8E%E9%80%92%E5%BD%92%E5%9C%B0%E9%81%8D%E5%8E%86%E7%9B%AE%E5%BD%95%E5%B9%B6%E6%A0%B9%E6%8D%AE%E6%96%87%E4%BB%B6%E7%B1%BB%E5%9E%8B%E6%9D%A1%E4%BB%B6%E8%BF%9B%E8%A1%8C%20chmodding%20%E7%9A%84%20Shell%20%E8%84%9A%E6%9C%AC.png)
任何人都可以向我指出编写 shell 脚本的代码或教程,该脚本可以递归地遍历整个目录结构(从当前工作目录开始,或者给出从哪里开始的必需参数)并且可以:
- 确定一个项目是否是一个目录,如果是,则
chmod 755
它,或者... - 确定一个项目是否是一个文件(不是目录),以及
chmod 644
它。
我正在寻找与 Ubuntu、Debian、基于 RHEL 等的兼容性,因此我不会使用任何特定语言来标记它。我希望在 Bash 中这样做,但如果您有 ZSH 脚本,那也可以。
答案1
我习惯了这一行命令(将从当前工作目录开始递归)
find . -type d -exec chmod 0755 '{}' + -or -type f -exec chmod 0644 '{}' +
解释:
find . # starting in curdir find
-type d # any directory
-exec chmod 0755 '{}' # and chmod it to 755
+ # (variant of -exec look find man page)
-or # or
-type f # any file
-exec chmod 0644 '{}' # and chmod it to 644
+ # (as above)
答案2
简单的答案:
chmod -R a+rX .
+X
(注意大写的X)意味着如果某个用户已经存在执行权限,则授予执行权限。如果您的目录树具有所有者的正确权限,并且您希望每个人都可以访问它,那么这是正确的命令。它不仅使目录可以全局执行,还可以使文件成为可执行文件。
如果您还想仅将写入权限重置为所有者并清除任何 setuid/setgid 位,请执行以下操作
chmod -R a-ws,u+w,a+rX .
如果您不想使任何文件可执行,则必须使用 zsh 两行代码:
chmod 755 **/*(/)
chmod 644 **/*(.)