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

use*_*171 34 linux permissions bash copy chmod

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

假设这些在目录中:

version1/
version2/
Run Code Online (Sandbox Code Playgroud)

问题是版本1 /中的权限搞砸了,我想复制版本2 /的权限,但是没有替换版本1 /更新版本的文件.

是否有通过bash自动完成此操作的方法?(它不一定是bash,也可能是其他一些方法/编程语言).

And*_*rup 68

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

chmod --reference version2/somefile version1/somefile
Run Code Online (Sandbox Code Playgroud)

应用findxargs以装配方式,你应该罚款,即像

 ~/version2$ find . -type f | xargs -I {} chmod --reference {} ../version1/{}
Run Code Online (Sandbox Code Playgroud)

这甚至可以递归地工作,并且对目标目录中的丢失文件具有鲁棒性(禁止这样的文件......错误,可以忽略).当然,它不会对仅存在于目标目录中的文件执行任何操作.

干杯,

  • 注意`--reference`是一个GNU特性,而不是POSIX,所以`chmod`可能不会在所有系统中都有它. (2认同)

uba*_*uba 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
Run Code Online (Sandbox Code Playgroud)

使用参数version2 version1运行脚本