找 .-type f -exec chmod 644 {};

use*_*187 43 ssh find chmod magento

为什么这不工作我试图将所有文件更改为644 abd all -d to 755:

find . -type f -exec chmod 644 {} ;
Run Code Online (Sandbox Code Playgroud)

我得到:找到:缺少`-exec'的参数 谢谢

Phi*_*hil 122

管道到xargs是一种肮脏的方式,可以在find中完成.

find . -type d -exec chmod 0755 {} \;
find . -type f -exec chmod 0644 {} \;
Run Code Online (Sandbox Code Playgroud)

您可以更好地控制其他选项,例如:

find . -type d -user harry -exec chown daisy {} \;
Run Code Online (Sandbox Code Playgroud)

您可以通过查找做一些非常酷的事情,也可以做一些非常危险的事情.看看"找人",它很长但值得快速阅读.并且,一如既往地记住:

  • 如果你是root用户,它就会成功.
  • 如果你是root(/),你将会度过糟糕的一天.
  • 使用/ path/to /目录可以使事情更加安全,因为您清楚地定义了要运行的位置.

  • 为什么xargs方法会成为"肮脏的方式"?它具有仅运行chmod一次的巨大优势,所有文件都作为参数."-exec chmod"方法将为每个文件创建一个子进程. (3认同)
  • 如果只想运行chmod一次,则将其更改为`find。-type f -exec chmod 0644 {} +`的工作原理与xargs方法相同,构建了一个命令行。(上面的\仅用于转义分号。) (2认同)
  • 注意 - xargs 通常优于 exec。使用 exec 时,会为每个输入调用该命令,但使用 xargs 时,该命令通常只运行一次。因此,如果您的查找查询给出数千个结果,xargs 的速度会快几倍! (2认同)

Set*_*aki 16

一个很好的选择是:

find . -type f | xargs chmod -v 644
Run Code Online (Sandbox Code Playgroud)

和目录:

find . -type d | xargs chmod -v 755
Run Code Online (Sandbox Code Playgroud)

并且更明确:

find . -type f | xargs -I{} chmod -v 644 {}
Run Code Online (Sandbox Code Playgroud)


Fab*_*ler 6

我经常需要此文件,因此我在~/.bashrc文件中创建了一个函数:

chmodf() {
        find $2 -type f -exec chmod $1 {} \;
}
chmodd() {
        find $2 -type d -exec chmod $1 {} \;
}
Run Code Online (Sandbox Code Playgroud)

现在,我可以使用以下快捷方式:

chmodd 0775 .
chmodf 0664 .
Run Code Online (Sandbox Code Playgroud)