Linux
遞歸更改所有者/組的更快方法?
目前,當我想遞歸更改所有者/組時,我這樣做:
find . -type f -exec chown <owner>.<group> {} \; find . -type d -exec chown <owner>.<group> {} \;
但是每個命令可能需要幾分鐘。我聽說有一種方法可以一次更改所有文件(更快),而不是一次一個,但我似乎找不到資訊。可以這樣做嗎?
使用
chown
的遞歸選項:chown -R owner:group * .[^.]*
同時指定
*
and.[^.]*
將匹配所有匹配的文件和目錄find
。現在推薦的分隔符是:
代替.
. (正如justins所指出的, using.*
是不安全的,因為它可以擴展為包含.
and..
,從而導致chown
更改父目錄及其所有子目錄的所有權。)如果您也想更改目前目錄的所有權,這可以簡化為
chown -R owner:group .
對於像
chown
這樣有自己遞歸的命令,使用該選項是最快的:chown -R owner:group * .[^.]*
警告!在某些 shell 中,表單會
chown -R owner:group * .*
替換根目錄 / 中的所有者。因為.*
意味著../../../../root, ../bin ... etc
。所有路徑。但是,最廣泛使用的 shell bash並不適用.
and..
擴展模式。然而,了解減慢使用速度的主要問題是您在找到的每個目錄和文件上都
find
呼叫它是有用的。chmown
使用起來要快得多:find . -type f -exec chown <owner>:<group> {} + find . -type d -exec chown <owner>:<group> {} +
因為每次都
chown
使用命令行上適合的參數呼叫。該更改也適用於其他沒有內置遞歸選項的命令,例如
chown
,。它在有這樣一個遞歸選項但你不能使用它的情況下工作(並提高速度)(例如,在使用時chmod
,你只想更改目錄)。