有时候确实有这样的需求,两个文件夹下面的文件都差不多,但是他们因为各种原 因不属于同一个 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
}