我正在寻找一个 Linux 命令,它可以将属于特定用户的所有文件(最好是在目标目录中)的所有权更改为另一个指定的用户。
我梦想的命令看起来像这样......
chuser -R --olduser tom --newuser jerry
或者
chuser -R --olduser 1066 --newuser 1492
这是我的情况...我有一个备份文件 (.tgz),其中保存了用户和组信息。它是从运行 Apache 和 MySQL 的 Web 服务器获取的。备份中的文件来自整个系统,包含来自几个不同用户和几个系统类型帐户的文件,关键是确保在新服务器上恢复时设置不会丢失。问题是文件正在恢复到的计算机上的用户与备份文件中的用户不匹配。例如,两台机器都有一个 MySQL 用户,但他们有不同的用户 ID,并且两台机器上都存在属于不同用户的用户 ID。这意味着无法将新机器上的用户同步到旧机器上的用户。
我可以使用这样的 find 命令找到所有用户文件......
find /decompressed-backup-dir -uid 1050
或者
find /decompressed-backup-dir -user tom
如果正如我怀疑的那样,没有办法用一个命令来完成我想要做的事情,那么也许有办法将 find 命令的结果传送到另一个命令来处理所有权变更?
我可以使用 PHP 脚本来做到这一点,但是备份中有 4GB 和数万个文件,所以我不想使用 PHP 或 Perl,但我很乐意使用可以处理它的 shell 脚本。
答案1
我认为 chown 命令上的 --from 标志可能是最简单的方法。
chown --recursive --from=oldguy newguy *
答案2
就像是
find /decompressed-backup-dir -uid 1050 -exec chown newuser:newgroup {} +
答案3
添加到SiteKickr 的回答,chgrp
没有参数,但您可以通过省略用户来--from
实现相同的效果。chown
例子:
chown -R --from=:currentgroup :newgroup /some/directory
答案4
这回答设置用户和组:
find /decompressed-backup-dir -uid 1050 -exec chown newuser:newgroup {} +
但如果您只想更改属于某个用户的文件组,则不能使用chown
(据我所知),而是使用chgrp
:
find /decompressed-backup-dir -uid 1050 -exec chgrp newgroup {} +
并且只更改属于某个组的文件组,您必须使用例如:
find /decompressed-backup-dir -gid 400 -exec chgrp newgroup {} +
只是为了补充知识。