我有两个相同目录树的副本。他们几乎在两个文件中都有相同的文件(一个版本可能有一些额外的文件或丢失的文件)。但是,大多数文件在两个目录中都是相同的(具有相同的相对路径和所有内容)。复制文件权限,但不复制文件
承担这些都是目录:
version1/
version2/
的问题是,在VERSION1权限/弄乱了,我想在从版本2 /权限复制,但做到这一点,无需更换文件在版本1 /更新。
是否有自动化的方式通过bash来做到这一点? (它不一定是bash,也可以是其他方法/编程语言)。
我有两个相同目录树的副本。他们几乎在两个文件中都有相同的文件(一个版本可能有一些额外的文件或丢失的文件)。但是,大多数文件在两个目录中都是相同的(具有相同的相对路径和所有内容)。复制文件权限,但不复制文件
承担这些都是目录:
version1/
version2/
的问题是,在VERSION1权限/弄乱了,我想在从版本2 /权限复制,但做到这一点,无需更换文件在版本1 /更新。
是否有自动化的方式通过bash来做到这一点? (它不一定是bash,也可以是其他方法/编程语言)。
你应该看看--reference
选项chmod
:
chmod --reference version2/somefile version1/somefile
以固定方式应用find
和xargs
,你应该罚款,即像
~/version2$ find . -type f | xargs -I {} chmod --reference {} ../version1/{}
这甚至作品递归地,并且对目标目录中丢失的文件是健壮的(bar 没有这样的文件...错误,这可以被忽略)。当然,它不会对只存在于目标目录中的文件执行任何操作。
欢呼声,
只是为了conf irm,在上面的命令中,它将版本2更改为匹配版本1,而不是相反的正确?最后,这对于缺失文件是强大的? – user788171 2013-03-06 14:44:21
分别为否。 – 2013-03-06 15:01:19
为了详细说明,它将当前目录的权限复制到版本1,并且如果目标目录中没有匹配的文件,我不确定是否会继续执行'xargs' - 您应该在运行FS之前进行测试。 – 2013-03-06 15:41:01
chmod owner-group-other ./dir或./file可能吗?
除非权限很好,并且从一个文件到另一个文件不同,您可以对目录执行递归chmod并统一权限。
见人CHMOD的,可能是
你可以使用这个脚本(它改变的权限递归,但单独为每个文件/目录)
#!/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
运行脚本有用的选项引用参数版本2版本1
我在与此主题相关的ServerFault中创建了一个新问题:[复制文件权限,但不是Unix中的文件](http://serverfault.com/questions/665237/copy-file-permissions-but- not-files-in-unix) – 2015-02-05 12:25:48