Linux

chown 目錄內容的最簡單方法是什麼?

  • September 30, 2021

我經常用

ls -ld .
# remember current user and group
chown -R user.group .
chown remembered_user.remembered_group .

難道沒有更簡單的方法來遞歸地 chown 目錄中的所有文件和目錄,而不是目錄本身嗎?它應該包括隱藏文件並且無論有多少文件都可以工作。

您可以使用find來避免參數列表太長,同時仍然盡可能多地chown一次性傳遞參數(使用+而不是;)。-prune允許您刪除一些不需要的參數chown(它不會下降目錄,它只會chown -R在它們上使用):

find . \! -iname . -prune -exec chown -R user:group {} +

為什麼不chown遞歸地在目錄中執行。

$ chown -R user.group *

例子

.之前的目錄。

$ ll
total 20
drwxrwxr-x. 2 saml saml 4096 Apr  9 22:30 dir1
drwxrwxr-x. 2 saml saml 4096 Apr  9 22:30 dir2
drwxrwxr-x. 2 saml saml 4096 Apr  9 22:30 dir3
drwxrwxr-x. 2 saml saml 4096 Apr  9 22:30 dir4
drwxrwxr-x. 2 saml saml 4096 Apr  9 22:30 dir5

只更改 dir 的內容。

$ chown -R saml.wheel *

後的內容。

$ ll
total 20
drwxrwxr-x. 2 saml wheel 4096 Apr  9 22:30 dir1
drwxrwxr-x. 2 saml wheel 4096 Apr  9 22:30 dir2
drwxrwxr-x. 2 saml wheel 4096 Apr  9 22:30 dir3
drwxrwxr-x. 2 saml wheel 4096 Apr  9 22:30 dir4
drwxrwxr-x. 2 saml wheel 4096 Apr  9 22:30 dir5

同時,目錄.保持不變。

$ ls -ld .
drwxrwxr-x. 7 saml saml 4096 Apr  9 22:29 .

如果有隱藏文件,請確保設置您的 shell 以將它們包含在 glob 中:shopt -s dotglob在 bash 中、FIGNORE='@(.|..)'在 ksh93 中、setopt dot_glob在 zsh 中。

或者,添加與它們匹配的模式(請注意,在 zsh 以外的 shell 中,.*將匹配.and ..):

chown -R saml.wheel * .[!.]* ..?*

或者在 zsh 中,簡單地

chown -R saml.wheel *(D)

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