Linux 复制文件权限,但不复制文件

Linux 复制文件权限,但不复制文件,linux,bash,permissions,copy,chmod,Linux,Bash,Permissions,Copy,Chmod,我有两个相同目录树的副本。它们在这两个版本中几乎有相同的文件(一个版本可能有几个额外的或丢失的文件)。但是,大多数文件对于两个目录都是通用的(具有相同的相对路径和所有内容) 假设这些都在目录中: version1/ version2/ 问题是version1/中的权限搞乱了,我想复制version2/中的权限,但不替换version1/中更新的文件 有没有一种通过bash自动完成的方法?(它不一定是bash,也可以是其他方法/编程语言)。您应该查看--reference选项以了解: 以合适的方

我有两个相同目录树的副本。它们在这两个版本中几乎有相同的文件(一个版本可能有几个额外的或丢失的文件)。但是,大多数文件对于两个目录都是通用的(具有相同的相对路径和所有内容)

假设这些都在目录中:

version1/
version2/
问题是version1/中的权限搞乱了,我想复制version2/中的权限,但不替换version1/中更新的文件


有没有一种通过bash自动完成的方法?(它不一定是bash,也可以是其他方法/编程语言)。

您应该查看
--reference
选项以了解:

以合适的方式应用
find
xargs
,您应该很好,例如

 ~/version2$ find . -type f | xargs -I {} chmod --reference {} ../version1/{}
这甚至可以递归地工作,并且对于目标目录中丢失的文件(除了可以忽略的“没有这样的文件…”错误)非常健壮。当然,它不会对仅存在于目标目录中的文件执行任何操作

干杯,

您可以尝试:

chmod owner-group-other ./dir or ./file
除非权限是细粒度的,并且不同文件之间的权限不同,否则可以对目录执行递归chmod并统一权限

有关可能有用的选项的参考,请参见man chmod

您可以使用此脚本(它递归地更改每个文件/目录的权限)


使用参数version2 version1运行脚本,只是为了确认,在上面的命令中,它正在将版本2更改为与版本1匹配,反之亦然。是否正确?最后,这对丢失的文件有很强的鲁棒性?分别是否。更详细地说,它将PERM从当前目录复制到版本1,如果目标目录中没有匹配的文件,我不确定
xargs
是否会继续-您应该在运行live FS之前进行测试。请注意
--reference
是GNU的一项功能,不是POSIX,因此
chmod
可能在所有系统中都没有。我可以通过从live CD复制权限来保存Fedora安装。9个月后仍然有效。非常感谢。我在ServerFault中创建了一个与此主题相关的新问题:我认为这是一个很好的问题,其他问题也是如此,问题和答案的100多张赞成票证明了这一点。如果您不能重新打开这个问题,至少将它迁移到Unix和Linux,在那里您会更加感激。我没有足够的代表在这里提名重新开放,但希望OP有。我知道这是五年前,但我想知道你是否记得测试时,你张贴它。我想试一试,但不想在没有事先确认的情况下,把复制、粘贴和运行它的工作搞得一团糟。
chmod owner-group-other ./dir or ./file
#!/bin/sh
chmod --reference $1 $2
if [ -d $1 ]
then
    if [ "x`ls $1`" != "x" ]
    then
        for f in `ls $1`
        do
            $0 $1/$f $2/$f
        done
    fi
fi