将权限复制到 linux/unix 上的相同树

yaw*_*iek 23 filesystems permissions copy file-permissions

我有一棵具有正确权限的文件树。然后我有一个(文件方式)相同的树(具有不同的文件内容),但权限错误。

如何将权限布局从一棵树转移到另一棵树?

mar*_*lar 34

我刚刚学会了一种新的简单方法来实现这一点:

getfacl -R /path/to/source > /root/perms.acl
Run Code Online (Sandbox Code Playgroud)

这将生成一个包含所有权限和所有权的列表。

然后转到目标上方的一级并使用以下命令恢复权限

setfacl --restore=/root/perms.acl
Run Code Online (Sandbox Code Playgroud)

您必须高于一级的原因是 perms.acl 中的所有路径都是相对的。

应该以root身份完成。


Dom*_*Dom 14

如果你有源和目标,你可以同步你的权限 rsync -ar --perms source/ dest

它不会传输数据,只会传输权限...


Zor*_*che 12

您可以做的一件事是使用find命令使用复制权限所需的命令构建脚本。这是一个快速示例,您可以使用各种 printf 选项执行更多操作,包括获取所有者、组 ID 等。

$ find /var/log -type d -printf "chmod %m %p \n" > reset_perms
$ cat reset_perms
chmod 755 /var/log
chmod 755 /var/log/apt
chmod 750 /var/log/apache2
chmod 755 /var/log/fsck
chmod 755 /var/log/gdm
chmod 755 /var/log/cups
chmod 2750 /var/log/exim4
...
Run Code Online (Sandbox Code Playgroud)


drA*_*erT 8

可以使用以下 shell 行来完成:

D1=foo; D2=foo2; for entry in $(find $D1  -exec stat -f "%N:%Mp%Lp" {} \;); do $(echo $entry | sed 's#'$D1'#'$D2'#' | awk -F: '{printf ("chmod %s %s\n", $2, $1)}') ; done
Run Code Online (Sandbox Code Playgroud)

只需为 D1 和 D2 变量设置正确的值,将它们指向源目录和目标目录,运行,目录将具有同步权限。