我可以更改特定用户的所有文件的所有权吗?

joh*_*ohn 11 linux shell bash centos shell-scripting

有没有办法递归地查找用户拥有的所有文件并将它们更改为 Gnu/Linux 中的另一个用户/组?

我认为一定有一些神奇的单线,但我的命令行巫术技能达不到那个程度:)

谢谢!

cjc*_*cjc 15

使用find带有-user选项的命令。就像是:

find / -user john

最终将打开用户“john”拥有的所有文件。

如果你想改变他们的所有权(我会在find不执行的情况下运行以确保你有你想要的列表),然后是这样的:

find / -user john -exec chown harry {} \;

会做的。


小智 7

这已经晚了,但今天我偶然发现了这个问题,因为我rsync没有--usermap选择。

我的chown(v. chown (GNU coreutils) 8.13) 提供了一个内置的递归 ( -R) 和一个--from选项,所以你的(和我的)问题也可以使用

chown -R --from=john harry /
Run Code Online (Sandbox Code Playgroud)


更具体地说,我正在将服务器从 OpenSuse 迁移到 debian,并且 apache2 的用户和组在发行版之间有所不同。在 OpenSuse 中它的 userwwwrun (id:30)和 group www (id:8),在 debianwww-data (id: 33)中都适用。在我使用复制文件后

rsync -az /path/to/files me@debian:/path/to/
Run Code Online (Sandbox Code Playgroud)

我用了

chown -R --from=30 33 /path/to/files/
chown -R --from=:8 :33 /path/to/files/
Run Code Online (Sandbox Code Playgroud)

在目标(debian)机器上。


注意:rsync version 3.1.0 protocol version 31上面提到--usermap过,所以如果我有的话,我可以在源机器上用一个命令完成所有三个步骤:

rsync -az --usermap=30:33 --groupmap=8:33 /path/to/files root@debian:/path/to/
Run Code Online (Sandbox Code Playgroud)