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

我有一个具有正确权限的文件树。 那么我有一个(文件)相同的树(不同的文件内容艰难)与错误的权限。

我怎样才能将权限布局从一棵树转移到另一棵树?

    它可以通过以下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和D2variables设置正确的值,将它们指向源目录和目标目录,运行并且目录将具有同步权限。

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

     getfacl -R /path/to/source > /root/perms.acl 

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

    然后转到目标上方的一个级别并使用恢复权限

     setfacl --restore=/root/perms.acl 

    你必须在上面一级的原因是perms.acl中的所有path都是相对的。

    应该以root身份完成。

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

    它不会传输数据,只是权限…

    你可以做的一件事是使用find命令来构build一个脚本,其中包含你需要复制权限的命令。 下面是一个简单的例子,你可以使用各种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 ... 

    两种方式:

    1. 如果它适用于您的UNIX品牌:cp -ax / src / dest
    2. 否则,这是便携版:(cd / src && tar cpf – 。)| (cd / dst && tar xpf – )

    (在后一种情况下/ dst必须存在)

    编辑:对不起,我误读了。 不是你问的。

    我想我会写一个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 

    我把它写在我头顶,没有经过testing; 所以检查之前,让它运行猖獗。 这只修复了存在的目录的权限; 它不会更改文件的权限,也不会创build丢失的目录。

    我想出了这个:

     find $SOURCE -mindepth 1 -printf 'chmod --reference=%p\t%p\n'|sed "s/\t$SOURCE/ $DEST/g"|sh 

    这不是完全的防弹,而是做我所需要的。