62

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

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

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

4

3 回答 3

159

管道到 xargs 是一种肮脏的方式,可以在 find 内部完成。

find . -type d -exec chmod 0755 {} \;
find . -type f -exec chmod 0644 {} \;

您可以使用其他选项进行更多控制,例如:

find . -type d -user harry -exec chown daisy {} \;

你可以用 find 做一些非常酷的事情,也可以做一些非常危险的事情。看看“man find”,它很长,但值得快速阅读。而且,一如既往地记住:

  • 如果你是root,它会成功。
  • 如果您在 root (/) 中,那么您将有一个糟糕的一天。
  • 使用 /path/to/directory 可以使事情变得更安全,因为您清楚地定义了要运行的位置。
于 2014-02-28T00:09:51.050 回答
21

一个很好的选择是这样的:

find . -type f | xargs chmod -v 644

对于目录:

find . -type d | xargs chmod -v 755

更明确地说:

find . -type f | xargs -I{} chmod -v 644 {}
于 2013-11-02T04:23:31.223 回答
10

我经常需要这个,所以我在我的~/.bashrc文件中创建了一个函数:

chmodf() {
        find $2 -type f -exec chmod $1 {} \;
}
chmodd() {
        find $2 -type d -exec chmod $1 {} \;
}

现在我可以使用这些快捷方式:

chmodd 0775 .
chmodf 0664 .
于 2017-03-23T12:13:03.120 回答