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

我有两个相同的目录树的副本。 他们几乎都有相同的文件(一个版本可能有一些额外的或丢失的文件)。 但是,大部分文件对于两个目录是相同的(具有相同的相对path和所有内容)。

假设这些在目录中:

version1/ version2/ 

问题是版本1中的权限/搞砸了,我想从版本2 /复制权限,但没有replace版本1 /这是更新的文件。

有没有一个自动化的方式来通过bash做到这一点? (它不一定是bash,也可以是其他一些方法/编程语言)。

你应该看看chmod--reference选项:

 chmod --reference version2/somefile version1/somefile 

以合适的方式应用findxargs ,你应该很好,即类似的东西

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

这甚至可以递归地工作,并且对于在目标目录中丢失文件是可靠的(bar 没有这样的文件…错误,可以被忽略)。 当然,它不会对目标目录中只存在的文件做任何事情。

干杯,

你可以使用这个脚本(它递归地改变权限,但是为每个文件/目录单独地改变权限)

 #!/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版本1运行脚本

chmod owner-group-other ./dir或./file也许?

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

请参阅man chmod以获取可能有用的选项的参考