我有两个相同的目录树的副本。 他们几乎都有相同的文件(一个版本可能有一些额外的或丢失的文件)。 但是,大部分文件对于两个目录是相同的(具有相同的相对path和所有内容)。
假设这些在目录中:
version1/ version2/
问题是版本1中的权限/搞砸了,我想从版本2 /复制权限,但没有replace版本1 /这是更新的文件。
有没有一个自动化的方式来通过bash做到这一点? (它不一定是bash,也可以是其他一些方法/编程语言)。
你应该看看chmod
的--reference
选项:
chmod --reference version2/somefile version1/somefile
以合适的方式应用find
和xargs
,你应该很好,即类似的东西
~/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以获取可能有用的选项的参考