递归更改所有者/组的更快方法?

递归更改所有者/组的更快方法?

目前,当我想递归地更改所有者/组时,我这样做:

find . -type f -exec chown <owner>.<group> {} \;
find . -type d -exec chown <owner>.<group> {} \;

但每个命令可能需要几分钟的时间。我听说有一种方法可以做到这一点,以便它可以一次更改所有文件(更快),而不是一次更改一个文件,但我似乎找不到信息。可以吗?

答案1

使用chown的递归选项:

chown -R owner:group * .[^.]*

指定两者*并将.[^.]*匹配所有文件和目录find。现在推荐的分隔符是:代替.. (正如指出的贾斯汀, using.*是不安全的,因为它可以扩展为包含...,从而导致chown更改父目录及其所有子目录的所有权。)

如果您也想更改当前目录的所有权,可以简化为

chown -R owner:group .

答案2

对于这样的命令chown有自己的递归,使用该选项是最快的:

 chown -R owner:group * .[^.]*

警告!在某些 shell 中,该表单chown -R owner:group * .*会替换根目录 / 中的所有者。因为.*意味着../../../../root, ../bin ... etc。所有路径。然而,使用最广泛的外壳,巴什, 不适用..., 扩展模式。

然而,了解减慢使用速度的主要问题是对找到的每个目录和文件find进行调用是有用的。chmown使用起来要快得多:

find . -type f -exec chown <owner>:<group> {} +
find . -type d -exec chown <owner>:<group> {} +

因为每次调用时chown都会使用命令行上适合的尽可能多的参数。

该更改也适用于其他没有内置递归选项(如chown, )的命令。在有这样的递归选项但您无法使用它的情况下(例如,当使用chmod,并且您只想更改目录时),它可以工作(并提高速度)。

相关内容