目前,当我想递归地更改所有者/组时,我这样做:
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
,并且您只想更改目录时),它可以工作(并提高速度)。