35

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

假设这些在目录中:

version1/
version2/

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

是否有通过 bash 自动执行此操作的方法?(不一定是 bash,也可以是其他方法/编程语言)。

4

3 回答 3

70

您应该查看以下--reference选项chmod

chmod --reference version2/somefile version1/somefile

以合适的方式应用findxargs你应该没问题,即类似

 ~/version2$ find . -type f | xargs -I {} chmod --reference {} ../version1/{}

这甚至可以递归地工作,并且对目标目录中丢失的文件很健壮(禁止No such file ...错误,可以忽略)。当然,它不会对只存在于目标目录中的文件做任何事情。

干杯,

于 2013-03-06T10:48:34.683 回答
10

您可以使用此脚本(它以递归方式更改权限,但为每个文件/目录单独更改)

#!/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

使用参数 version2 version1 运行脚本

于 2013-03-06T11:03:03.150 回答
0

你可以试试:

chmod owner-group-other ./dir or ./file

除非权限是细粒度的并且从一个文件到另一个文件不同,否则您可以对目录执行递归 chmod 并统一权限。

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

于 2013-03-06T10:48:49.383 回答