用Shell Script导出SVN版本间变更的文件

#!/bin/bash

# 配置
# TODO 将配置信息保存在外部文件中以方便产生不同目标的导出。
START=9981
END=10054
VER=eom
BUILD=v1
OUTPUT_PATH=builds/$VER/$BUILD/files/

# 清理
if [ -d "$OUTPUT_PATH" ]; then
	rm -rf $OUTPUT_PATH
fi

# 得到更改过的文件数量和文件名列表
# svn diff --summarize 返回"Status \t Filename"

COUNT=`svn diff --summarize -r $START:$END | wc -l`
Diff=`svn diff --summarize -r $START:$END`
until [ $COUNT -lt "1" ]
do
	# echo "$Diff" 的用法也许不合适。
	# awk pattern action, 'print $2' 即输出第二列的内容
	# grep -v 反向选择,即不含模式的。此为“选取路径不以builds开头的文件”

	File="`echo "$Diff" | awk {'print $2'} | grep "^builds" -v | head -$COUNT | tail -1`"
	Dir=`dirname $File`
	Name=`basename $File`

	# 检查目标路径,如不存在则递归的创建

	if [ ! -d "$OUTPUT_PATH$Dir" ]; then
		mkdir $OUTPUT_PATH$Dir -p
	fi
	
	# 将文件中的string1替换为string2,并且输出到目标路径
	# 此处是将两个操作合并,也可先做cp,再替换
	sed 's/string1/string2/g' $File > $OUTPUT_PATH$Dir/$Name

	# 如果目标文件中含有string3,则将之替换为string4,在目标文件上操作。
	if grep "string3" $File > /dev/null
	then
		sed -in-place -e 's/string3/string4/g' $OUTOUT_PATH$Dir/$Name
	fi

	# 去除string5
	if grep "string5" $File > /dev/null
	then
		sed -in-place -e 's/string5\///g' $OUTPUT_PATH$Dir/$Name
	fi

	# more replace here
	# TODO

	# replace configure variables, need define configure file
	# TODO

	COUNT=`expr $COUNT - 1`
done

# export changed database table
# TODO

# commit to svn
# TODO

另外记录一条批量替换字串的命令:

sed -i 's/pattern/new/g' `grep -rl 'pattern' *`
# sed -i: in place,在原文件上操作
# grep -r: recursive,递归的,遍历所有子目录下的文件
# grep -l: file with matches,返回包含有模式的文件
This entry was written by Wang Xiaoxing , posted on Friday June 04 2010at 05:06 pm , filed under Linux, Shell, SVN and tagged , , , , , , . Bookmark the permalink . Post a comment below or leave a trackback: Trackback URL.

2 Responses to “用Shell Script导出SVN版本间变更的文件”

  • Mohammad says:

    You write so honstely about this. Thanks for sharing!

  • Superb site you have here but I was wondering if you knew of
    any community forums that cover the same topics discussed in this article?
    I’d really like to be a part of online community where I
    can get advice from other experienced people that share the same interest.
    If you have any suggestions, please let me know.
    Thanks!
    If you are a dog owner, whether you have had your dog for a while now or you
    have just gotten yourself a new puppy, you will understand just how important dog behaviour
    training can be.
    click here for access to best dog training tips,nutrition and treating of dog
    diseases:http://bit.ly/1L2MNBx

Leave a Reply

XHTML: You can use these tags: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>