当前位置: 技术问答>linux和unix
关于增量拷贝的问题
来源: 互联网 发布时间:2016-09-28
本文导语: 现在有两个目录web1, web2, 里面都有若干子目录及文件, 现在想保持两个目录的文件结构及文件相同。 当web2中有更新时,只把更新的文件及文件夹拷贝到web1中,同时不更新即过滤掉web2中的以.svn结尾的文件及文件...
现在有两个目录web1, web2, 里面都有若干子目录及文件,
现在想保持两个目录的文件结构及文件相同。
当web2中有更新时,只把更新的文件及文件夹拷贝到web1中,同时不更新即过滤掉web2中的以.svn结尾的文件及文件夹。
请大侠们指点
现在想保持两个目录的文件结构及文件相同。
当web2中有更新时,只把更新的文件及文件夹拷贝到web1中,同时不更新即过滤掉web2中的以.svn结尾的文件及文件夹。
请大侠们指点
|
我想你的web2是检出的SVN副本 所以带有.svn,而web1是export的 没有.svn目录,你想做到保持如果web2
目录更新了,把更新的内容也更新到web1目录吧!前段时间正好为了做增量编译,做了一个这样的脚本,我把
思路讲下:
1:写一个脚本,这个脚本首先到web2目录执行svn up命令,并把执行的结果写到一个tmp文件(/tmp/svn_up.list)
2:脚本中写一个函数,专门解析这个tmp文件,tmp文件中的内容一般形式如下
A file1
U file2
D file3
At revision 100.
其中A U D 分别表示增、改、删,可以根据解析到的是A或U或D 觉得是拷贝web2的文件到web1,还是删除web1中的文件。
给你这个解析函数
copyToLocal()
{
local item
declare -i index
item=(`cat /tmp/svn_up.list | awk 'BEGIN{FS=" "} NF==2 {printf("%s %sn",$1, $2)}'`)
index=0
while [ ${index} -lt ${#item[@]} ]; do
case "${item[$index]}" in
A) if [ -d "web2/${item[$index+1]}" ]; then
su - nm -c "mkdir web1/${item[$index+1]}"
else
cp -fp web2/${item[$index+1]} web1/${item[$index+1]}
fi
;;
U) cp -fp web2/${item[$index+1]} web1/${item[$index+1]}
;;
D) rm -rf web1/${item[$index+1]}
;;
*)
;;
esac
index=$(($index+2))
done
}
3: 你的脚本大致内容如下
#!/bin/sh
cd web2
svn up > /tmp/svn_up.list
copyToLocal
4: 执行这个脚本,你的需求就OK了
目录更新了,把更新的内容也更新到web1目录吧!前段时间正好为了做增量编译,做了一个这样的脚本,我把
思路讲下:
1:写一个脚本,这个脚本首先到web2目录执行svn up命令,并把执行的结果写到一个tmp文件(/tmp/svn_up.list)
2:脚本中写一个函数,专门解析这个tmp文件,tmp文件中的内容一般形式如下
A file1
U file2
D file3
At revision 100.
其中A U D 分别表示增、改、删,可以根据解析到的是A或U或D 觉得是拷贝web2的文件到web1,还是删除web1中的文件。
给你这个解析函数
copyToLocal()
{
local item
declare -i index
item=(`cat /tmp/svn_up.list | awk 'BEGIN{FS=" "} NF==2 {printf("%s %sn",$1, $2)}'`)
index=0
while [ ${index} -lt ${#item[@]} ]; do
case "${item[$index]}" in
A) if [ -d "web2/${item[$index+1]}" ]; then
su - nm -c "mkdir web1/${item[$index+1]}"
else
cp -fp web2/${item[$index+1]} web1/${item[$index+1]}
fi
;;
U) cp -fp web2/${item[$index+1]} web1/${item[$index+1]}
;;
D) rm -rf web1/${item[$index+1]}
;;
*)
;;
esac
index=$(($index+2))
done
}
3: 你的脚本大致内容如下
#!/bin/sh
cd web2
svn up > /tmp/svn_up.list
copyToLocal
4: 执行这个脚本,你的需求就OK了
|
哦,Linux平台的cp有-u这个选项
那直接拷贝就行了cp -pRu web2/* web1/
那直接拷贝就行了cp -pRu web2/* web1/
|
用rsync来保持同步吧!
http://hi.baidu.com/litaosmile/blog/item/c7691f03a5ebd7eb09fa9342.html
http://hi.baidu.com/litaosmile/blog/item/c7691f03a5ebd7eb09fa9342.html
|
你看看rsync的那些功能 看看需要哪些参数 看样子你2个目录都在本机而已 基本就是一句话
rsync --any-option web2 web1
你要定时执行 直接把这一句写到crontab里就行了
就算要写脚本不也就一句话吗
#!/bin/sh
rsync --any-option web2 web1
|
可以考虑使用cpio,自动忽略没有更新的文件
find web2 ! -name "*.svn"|cpio -pdm web1
find web2 ! -name "*.svn"|cpio -pdm web1
|
cp有这个功能吗?哪个选项?