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)
应用find
和xargs
以装配方式,你应该罚款,即像
~/version2$ find . -type f | xargs -I {} chmod --reference {} ../version1/{}
Run Code Online (Sandbox Code Playgroud)
这甚至可以递归地工作,并且对目标目录中的丢失文件具有鲁棒性(禁止这样的文件......错误,可以忽略).当然,它不会对仅存在于目标目录中的文件执行任何操作.
干杯,
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运行脚本