用rsync在copy时实现过滤

2014年9月5日


很早以前,大家都只会用scp来copy版本,深受".svn"文件的侵扰,我率先发现并使用了rsync命令把copy版本的时间缩短了一倍以上,一个版本基本上在一个小时内能够copy完成了。

以前用的命令是这个:
rsync -avlH --exclude=*.svn  --exclude=compile_temp root@10.43.83.165:/test/test1410/  /home/version/XXX_v4.14.10.I11_0428/

存在的问题:
今天在帮助小利同学copy版本的时候,她提出来,我只想过滤顶层的compile_temp,如果子文件夹中存在compile_temp我并不想过滤,这个命令能否实现呢?经过我再三验证,这个命令是无法实现的,它只是匹配正则表达式,把文件名与目录名为compile_temp全都过滤掉了,那我该怎么办呢?

解决方案:
经过一个中午辛苦的搜寻与尝试,在临近结束的时候我终于幸运的找到了答案。解决的关键是要理解rsync帮助文件中所提到的一个 top-directroy 的概念。
举例说明一下top-directroty:
root@10.43.83.165:/test/test1410/   (注意后面有个/),这个时候,它的top-directory即为gul_V4.14.10_CI
root@10.43.83.165:/test/test1410    (注意后面没有/),这个时候,它的top-directory即为xgw
也就是说,top-directory为从右往左第一个"/"左边的那个目录。理解了top-directory那要实现只过滤顶层的compile_temp就非常简单了。在rsync的帮助文件中明确了它的过滤只支持相对路径的,只需要用"/"锚定top-directory即可,如果过滤的规则以"/"开头,那么说明这条规则需要匹配一个固定的路径。那这个问题根据top-directory的不同有两个方案解决:
rsync -avlH --exclude=*.svn  --exclude=/compile_temp/ root@10.43.83.165:/test/test1410/  /home/version/XXX_v4.14.10.I11_0428/
rsync -avlH --exclude=*.svn  --exclude=/test1410/compile_temp/ root@10.43.83.165:/test/test1410  /home/version/XXX_v4.14.10.I11_0428/
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值