dan*_*nzo 30 linux command-line shell terminal chown
目前,当我想递归更改所有者/组时,我这样做:
find . -type f -exec chown <owner>.<group> {} \;
find . -type d -exec chown <owner>.<group> {} \;
Run Code Online (Sandbox Code Playgroud)
但是对于每个命令,这可能需要几分钟时间。我听说有一种方法可以做到这一点,它可以一次更改所有文件(更快),而不是一次更改一个,但我似乎找不到相关信息。可以做到吗?
Ste*_*itt 48
使用chown的递归选项:
chown -R owner:group * .[^.]*
Run Code Online (Sandbox Code Playgroud)
指定两者*和.[^.]*将匹配所有文件和目录find。现在推荐的分隔符是:而不是.. (正如justins所指出的, using.*是不安全的,因为它可以扩展为包含.and ..,从而导致chown更改父目录及其所有子目录的所有权。)
如果你也想改变当前目录的所有权,这可以简化为
chown -R owner:group .
Run Code Online (Sandbox Code Playgroud)
对于像chown这样有自己递归的命令,使用该选项最快:
chown -R owner:group * .[^.]*
Run Code Online (Sandbox Code Playgroud)
警告!在某些 shell 中,表单会chown -R owner:group * .*替换根目录 / 中的所有者。因为.*意味着../../../../root, ../bin ... etc。所有路径。但是,最广泛使用的 shell bash并不适用.和..扩展模式。
但是,了解减慢您使用速度的主要问题find是您chmown对找到的每个目录和文件进行调用是很有用的。使用起来要快得多:
find . -type f -exec chown <owner>:<group> {} +
find . -type d -exec chown <owner>:<group> {} +
Run Code Online (Sandbox Code Playgroud)
因为每次chown都使用命令行上适合的尽可能多的参数调用。
该更改也适用于其他没有内置递归选项chown(如 )的命令。它在有这样一个递归选项但你不能使用它的情况下工作(并提高速度)(例如,当使用chmod,并且你只想更改目录时)。