【发布时间】:2011-05-14 02:06:26
【问题描述】:
使用chmod,我在当前目录中执行chmod +x *.sh,但是如果我想更改所有文件,包括具有 sh 文件扩展名的子文件夹中的文件,该怎么办?
chmod +x -R * 可以,但我需要更像chmod +x -R *.sh 的东西
【问题讨论】:
标签: linux bash unix file-permissions chmod
使用chmod,我在当前目录中执行chmod +x *.sh,但是如果我想更改所有文件,包括具有 sh 文件扩展名的子文件夹中的文件,该怎么办?
chmod +x -R * 可以,但我需要更像chmod +x -R *.sh 的东西
【问题讨论】:
标签: linux bash unix file-permissions chmod
使用查找:
find . -name "*.sh" -exec chmod +x {} \;
【讨论】:
尝试使用 find 与 xargs 的完美组合。
find . -iname \*.sh -print0 | xargs -r0 chmod +x
. 是启动的目录,在本例中是工作目录。
【讨论】:
xargs 对于更复杂的用途来说功能稍强。
find 语法,它可以两全其美(有关详细信息,请参阅my answer)。
使用现代版本的find,您可以获得xargs 方法的好处,该方法可以避免多次调用命令 (chmod)。命令只是略有不同。
find . -name "*.sh" -exec chmod +x {} <strong>+</strong>
在 Arch 2015.09.01 上从 find docs 截取(强调由我添加):
-exec command {} +
-exec操作的这个变体对选定的文件运行指定的命令,但是命令行是通过在末尾附加每个选定的文件名来构建的;该命令的总调用次数将远少于匹配文件的数量。命令行的构建方式与xargs构建其命令行的方式非常相似。命令中只允许有一个{}实例。该命令在起始目录中执行。
【讨论】: