wai*_*ace 4 users recursive files chown
我是一个中等的 linux 用户。我更换了我的 PC,并从 CentOS 6 开始使用 CentOS 7。
所以我把我以前的硬盘连接到我的新电脑上来备份我的文件。现在,复制文件(并保留所有权限),文件将所有者显示为 500(我猜这是我以前的 UID)。
有什么办法可以将它们更改为我的新用户名?我想排除显示 501 等其他所有者的文件。
编辑:
例子:
ls -l
total 3
-rw-rw-r--. 1 500 500 210 Jan 10 2012 about.xml
drwxr-xr-x. 2 500 500 4096 May 15 2013 apache
drwxrwxr-x. 2 500 500 4096 Dec 9 2012 etc
Run Code Online (Sandbox Code Playgroud)
现在,我可以chown -R xyz:xyz .让它们看起来像:
ls -l
total 3
-rw-rw-r--. 1 xyz xyz 210 Jan 10 2012 about.xml
drwxr-xr-x. 2 xyz xyz 4096 May 15 2013 apache
drwxrwxr-x. 2 xyz xyz 4096 Dec 9 2012 etc
Run Code Online (Sandbox Code Playgroud)
但我只想知道是否有某种命令可以将用户 500 映射到用户“xyz”。
谢谢你。
如果我理解正确,您想将某个目录(或根目录)中由用户 #500 拥有的所有文件的所有者更改为由另一个用户拥有,而不修改任何其他用户拥有的文件。您处于这种情况是因为您从另一台机器复制了整个目录树,该树中的文件由许多不同的用户拥有,但您只对更新那些由“您的”用户拥有的文件感兴趣时刻,而不是用户 #501 或任何其他人拥有的任何文件。
GNUchown支持一个选项--from=500,您可以将其与-R递归选项结合使用来执行此操作:
chown -R --from=500 yourusername /path/here
Run Code Online (Sandbox Code Playgroud)
如果你有 GNU chown,这将是最快的选择,在 CentOS 上你应该这样做。
或者可以find在任何系统上使用:
find /path/here -user 500 -exec chown yourusername '{}' '+'
Run Code Online (Sandbox Code Playgroud)
find将递归查看内部的每个文件和目录/path/here,匹配用户#500 拥有的所有文件和目录。对于所有这些文件,它将chown yourusername file1 file2...根据需要执行多次。命令完成后,用户#500 拥有的所有文件都将归yourusername. 您需要运行该命令root才能更改文件所有者。
您可以通过运行相同的find命令而无需运行命令来检查任何落后者:
find /path/here -user 500
Run Code Online (Sandbox Code Playgroud)
此时它不应该列出任何文件。
一个重要的警告:如果用户 #500 拥有的任何文件是符号链接,chown默认情况下将更改符号链接指向的文件的所有者,而不是链接本身。如果您不信任您正在检查的文件,这是一个安全漏洞。chown -h在这种情况下使用。