yawniek Asked: 2009-08-25 22:59:07 +0800 CST2009-08-25 22:59:07 +0800 CST 2009-08-25 22:59:07 +0800 CST 将权限复制到 linux / unix 上的相同树 772 我有一个具有正确权限的文件树。然后我有一个(文件方面)相同的树(具有不同的文件内容很难)具有错误的权限。 如何将权限布局从一棵树转移到另一棵树? filesystems permissions copy file-permissions 7 个回答 Voted marlar 2010-02-27T05:05:27+08:002010-02-27T05:05:27+08:00 我刚刚学会了一种新的简单的方法来实现这一点: getfacl -R /path/to/source > /root/perms.acl 这将生成一个包含所有权限和所有权的列表。 然后转到目的地上方的一级并使用以下命令恢复权限 setfacl --restore=/root/perms.acl 您必须高于一级的原因是 perms.acl 中的所有路径都是相对的。 应该以root身份完成。 Dom 2009-08-25T23:28:17+08:002009-08-25T23:28:17+08:00 如果你有源和目标,你可以同步你的权限 rsync -ar --perms source/ dest 它不会传输数据,只是权限... Zoredache 2009-08-25T23:34:51+08:002009-08-25T23:34:51+08:00 您可以做的一件事是使用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 ... Best Answer drAlberT 2009-08-26T00:10:12+08:002009-08-26T00:10:12+08:00 可以使用以下 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 只需为 D1 和 D2 变量设置正确的值,将它们指向源目录和目标目录,运行并且目录将具有同步的权限。 Thomas 2009-08-26T00:28:44+08:002009-08-26T00:28:44+08:00 两种方式: 如果它适用于您的 UNIX 品牌:cp -ax /src /dest 或者如果没有,这是可移植版本: (cd /src && tar cpf - .) | (cd /dst && tar xpf -) (在后一种情况下 /dst 必须存在) 编辑:对不起,我看错了。不是你问的。 Mei 2009-08-26T01:14:38+08:002009-08-26T01:14:38+08:00 我想我会写一个 perl 脚本来做到这一点。就像是: #!/usr/bin/perl -nw my $dir = $_; my $mode = stat($dir)[2]; my $pathfix = "/some/path/to/fix/"; chmod $mode, $pathfix . $dir; 然后做这样的事情: cd /some/old/orig/path/ ; find . -type d | perlscript 我在脑海中写下了这个,还没有经过测试;所以在让它猖獗之前检查一下。这只修复了现有目录的权限;它不会更改文件的权限,也不会创建丢失的目录。 Ikem Krueger 2014-07-24T15:46:30+08:002014-07-24T15:46:30+08:00 我想出了这个: find $SOURCE -mindepth 1 -printf 'chmod --reference=%p\t%p\n'|sed "s/\t$SOURCE/ $DEST/g"|sh 它不是完全防弹的,但可以满足我的需要。
我刚刚学会了一种新的简单的方法来实现这一点:
这将生成一个包含所有权限和所有权的列表。
然后转到目的地上方的一级并使用以下命令恢复权限
您必须高于一级的原因是 perms.acl 中的所有路径都是相对的。
应该以root身份完成。
如果你有源和目标,你可以同步你的权限
rsync -ar --perms source/ dest
它不会传输数据,只是权限...
您可以做的一件事是使用find命令构建一个脚本,其中包含复制权限所需的命令。这是一个简单的示例,您可以使用各种 printf 选项做更多事情,包括获取所有者、组 ID 等。
可以使用以下 shell 行来完成:
只需为 D1 和 D2 变量设置正确的值,将它们指向源目录和目标目录,运行并且目录将具有同步的权限。
两种方式:
(在后一种情况下 /dst 必须存在)
编辑:对不起,我看错了。不是你问的。
我想我会写一个 perl 脚本来做到这一点。就像是:
然后做这样的事情:
我在脑海中写下了这个,还没有经过测试;所以在让它猖獗之前检查一下。这只修复了现有目录的权限;它不会更改文件的权限,也不会创建丢失的目录。
我想出了这个:
它不是完全防弹的,但可以满足我的需要。