40

使用chmod,我chmod +x *.sh在当前目录中执行,但是如果我想更改所有文件,包括具有 sh 文件扩展名的子文件夹中的文件,该怎么办?

chmod +x -R *会工作,但我需要更多类似的东西chmod +x -R *.sh

4

3 回答 3

72

使用查找:

find . -name "*.sh" -exec chmod +x {} \;
于 2010-11-22T20:25:55.763 回答
11

尝试使用 find 与 xargs 的完美组合。

find . -iname \*.sh -print0 | xargs -r0 chmod +x

是开始的.目录,在这种情况下是工作目录。

于 2010-11-22T20:27:22.937 回答
4

使用现代版本的findxargs,您可以获得避免多次调用命令 ( chmod)的方法的好处。该命令仅略有不同。

find . -name "*.sh" -exec chmod +x {} +

从Arch 2015.09.01的find文档中截取(重点由我添加):

-exec command {} +

-exec操作变体在选定文件上运行指定命令,但命令行是通过在末尾附加每个选定文件名来构建的;该命令的总调用次数将远少于匹配文件的数量。命令行的构建方式与xargs构建其命令行的方式大致相同。{}命令中只允许一个实例。该命令在起始目录中执行。

于 2015-09-16T20:58:18.253 回答