使用 1 个命令更改所有文件夹权限

使用 1 个命令更改所有文件夹权限

在我的 Web 应用程序目录中,如何将所有文件夹权限更改为rwxr-xr-x(755)?如何将所有文件权限更改为rw-r--r--(644)?我想更改所有文件夹和文件,包括子子文件和文件夹。

我知道以下命令会更改所有文件和文件夹,但我想区分文件和文件夹。

chmod -R 755 ./my_web_app_project

答案1

使用一个命令完全执行您想要的操作的一种方法find

find my_web_app_project '(' -type f -exec chmod 644 {} ';' ')' -o '(' -type d -exec chmod 755 {} ';' ')'

-o意味着或。此命令处理项目树中类型为“文件”的所有对象或者输入“directory”,并根据每个对象的类型执行不同的命令。

';'您可以通过用加号 ( ) 替换分号 ( +)来稍微提高效率;这告诉find 运行chmod 644一次,以所有普通文件的名称作为参数,并运行chmod 755一次,以所有目录的名称作为参数。

./ 顺便说一句,除了在当前目录中运行程序之外,您不需要说任何其他内容(尽管它有时在操作名称以某些特殊字符开头的文件时会派上用场)。


我想知道你的权限现在是什么样的(在运行递归树范围之前chmod)。文件通常不会打开其执行权限位,除非它们实际上是可执行程序,或者您不小心做了类似chmod -R 755.目录通常不会关闭其执行权限位,除非您做了一些灾难性的事情,例如chmod -R 644.如果由于不明智地chmod -R使用数字模式而导致权限严重混乱,请忽略本节并坚持使用本答案开头的命令。

但是,如果您的权限通常是合理的,并且您只想为用户施加读/写权限标准,并为其他人(组和世界)施加只读权限,那么您可以这样做

chmod -R +rX,u+w,go-w my_web_app_project

其中

  • +rX意味着+r,+X(注意 theX是大写的——这很重要)。
    • +r表示为用户、组等设置读取权限。
    • +X表示为用户、组等设置执行权限 如果当前已为其中任何一个设置或者如果对象是目录
  • u+w意思是给用户设置写权限。
  • go-w表示关闭组和其他的写权限。

总结一些要点:

  • 当然,您chmod只能访问您拥有的东西(除非您有特权)并且不是只读的。如果您的目录中存在您无法执行的操作chmod,则这些命令中的任何一个都将导致错误。
  • 这些find命令不会对目录或文件以外的内容(例如命名管道)执行任何操作。
  • 如果您还没有顶级目录下所有文件夹的读取和执行权限,find则命令可能会失败。-exec chmod 755 {} +
  • chmod -R +rX,u+w,go-w命令将
    • 将所有目录设置为模式 755,
    • 忽略符号链接,
    • 对于所有其他文件类型(包括命名管道):
      • 如果已经至少有一位,则将其设置为 755 x;否则,
      • 将其设置为 644。

答案2

你不能。您需要两个命令。

find ./my_web_app_project -type d -exec chmod 755 {} \;
find ./my_web_app_project -type f -exec chmod 644 {} \;

编辑:

请参阅 G-Man 的答案,因为它更正确。

相关内容