Sucha's Blog ~ Archive for September, 2013

13年9月29日 周日 18:45

Bash 下对比两个文件夹的文件并更新

有时候确实有这样的需求,两个文件夹下面的文件都差不多,但是他们因为各种原 因不属于同一个 git 根,至少在没有这些强大的版本控制系统下,我们又需要做对 比更新,那请看下面,需要 diff、cut 以及 bash 内建的 cp 命令。

checknew() {
	if [ $# == 2 ]; then
		diff -rqX ~/bin/diff_ignore.txt $1 $2
	else
		echo checknew DIR1 DIR2
	fi
}

checknew 用来检测那些文件有变动,其中会排除一些文件,文件名的模式放到了 ~/bin/diff_ignore.txt 中,我的那个内容如下:

*.git
*.so
*.dSYM
TAGS
*.elc
.gitignore

而 copynew src dest 这是将不同目录下的文件比较后做拷贝更新。

copynew() {
	if [ $# != 2 ]; then
		echo copynew srcDir desDir
		return
	fi

	tmp_file=/tmp/ccc.txt
	
	# generate diff output
	diff -rqX ~/bin/diff_ignore.txt $1 $2 | grep "^Files" | cut -d" " -f 2,4 > $tmp_file

	#update file
	magic=12343188
	src=$magic
	for file in $(cat $tmp_file); do
		des=$file
		if [ $src == $magic ]; then
			src=$des
            continue
		else
			cp $src $des
			src=$magic
		fi
	done

	rm $tmp_file
}