Nig*_*Owl 58 linux shell command-line
我正在寻找一个 Linux 命令,该命令可以将属于给定用户的所有文件的所有权(最好在目标目录中)更改为另一个指定用户。
我梦想中的命令看起来像这样......
chuser -R --olduser tom --newuser jerry
Run Code Online (Sandbox Code Playgroud)
或者
chuser -R --olduser 1066 --newuser 1492
Run Code Online (Sandbox Code Playgroud)
这是我的场景...我有一个备份文件 (.tgz),其中保存了用户和组信息。它取自运行 Apache 和 MySQL 的 Web 服务器。备份中的文件来自整个系统,包含来自多个不同用户和多个系统类型帐户的文件,关键是在新服务器上恢复时,设置不会丢失。问题是正在恢复文件的机器上的用户与备份文件中的用户不匹配。例如,两台机器都有一个 MySQL 用户,但它们有不同的用户 ID,并且两台机器上存在多个属于不同用户的用户 ID。这意味着无法将新机器上的用户同步到旧机器上的用户。
我可以使用 find 命令找到所有用户文件,如下所示...
find /decompressed-backup-dir -uid 1050
Run Code Online (Sandbox Code Playgroud)
或者
find /decompressed-backup-dir -user tom
Run Code Online (Sandbox Code Playgroud)
如果,正如我怀疑的那样,没有办法用单个命令做我想做的事,那么也许有一种方法可以将 find 命令的结果通过管道传输到另一个命令来处理所有权更改?
我可以用 PHP 脚本来做到这一点,但备份中有 4GB 和数万个文件,所以我不想使用 PHP 或 Perl,但我会对可以处理它的 shell 脚本感到满意。
小智 86
我认为 chown 命令上的 --from 标志可能是最简单的方法。
chown --from=oldguy newguy * -R
Run Code Online (Sandbox Code Playgroud)
Ben*_*igt 38
就像是
find /decompressed-backup-dir -uid 1050 -exec chown newuser:newgroup {} +
Run Code Online (Sandbox Code Playgroud)
小智 13
添加到SiteKickr的答案中,chgrp没有--from参数,但您可以chown通过省略用户来实现相同的目的。
例子:
chown -R --from=:currentgroup :newgroup /some/directory
Run Code Online (Sandbox Code Playgroud)
您可以find像其他人发布的那样使用来执行chown.
但是,您可能不必tar为您处理事情。
例如,如果你犯了一个tar在machine A这里的用户tom是uid 500后untar上的文件machine B,其中用户tom是uid 505,tar会做正确的事,让所拥有的文件uid 505。
| 归档时间: |
|
| 查看次数: |
56175 次 |
| 最近记录: |