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/
很早以前,大家都只会用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/