Linux

遞歸更改所有者/組的更快方法?

  • May 12, 2018

目前,當我想遞歸更改所有者/組時,我這樣做:

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,你只想更改目錄)。

引用自:https://unix.stackexchange.com/questions/285687