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
}

CategoryLinux / Permalink