用于递归地遍历目录并根据文件类型条件进行 chmodding 的 Shell 脚本

用于递归地遍历目录并根据文件类型条件进行 chmodding 的 Shell 脚本

任何人都可以向我指出编写 shell 脚本的代码或教程,该脚本可以递归地遍历整个目录结构(从当前工作目录开始,或者给出从哪里开始的必需参数)并且可以:

  1. 确定一个项目是否是一个目录,如果是,则chmod 755它,或者...
  2. 确定一个项目是否是一个文件(不是目录),以及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 **/*(.)

相关内容