文件夹智能合并,并覆盖相同文件


#!/bin/sh
#功能:把两个文件夹合并成一个文件夹,如果有同名的文件,会自动比较两个文件是否一致,一致会覆盖,不一致保存为原文件名加.new的文件
#2015-4-18
#wangzg

function scandir() {  
    local srcdir destdir
    srcdir="$1"
    destdir="$2"
    for dirlist in $(ls -a "$srcdir")   
    do
        if [ -d "$dirlist" -a "$dirlist" != "." -a "$dirlist" != ".." ];then
            cd "$dirlist"
            scandir "$srcdir/$dirlist" "$destdir/$dirlist"
            cd ..
        elif [ -f "$dirlist" ];then
            if [ ! -d "$destdir" ];then
                mkdir -p "$destdir"
                echo "mkdir -p $destdir"
            fi
            #文件存在
            if [ -f "$destdir/$dirlist" ];then
            #判断处理,如果一致就强制覆盖,如果不一致重命名后移动
                if cmp -s "$srcdir/$dirlist" "$destdir/$dirlist" ;then
                #文件相同
                    mv -f  "$srcdir/$dirlist" "$destdir/$dirlist"
                else
                    mv -f  "$srcdir/$dirlist" "$destdir/$dirlist"".new"
                    echo "move $srcdir/$dirlist to $destdir/$dirlist.new"
                fi
            else
            #文件不存在,直接移动
                mv -f  "$srcdir/$dirlist" "$destdir/$dirlist"
                echo "move $srcdir/$dirlist to $destdir/$dirlist"
            fi
        fi
    done  
}

IFS=$(echo -en "\n\b")
echo -en $IFS

curdir="$(pwd)"
srcdir="$1"
destdir="$2"
cd "$srcdir"  
if [ "$srcdir" = "/" ];then
    srcdir=""   
else   
    srcdir="$(pwd)"   
fi  
cd "$curdir"
cd "$destdir"
if [ "$destdir" = "/" ];then
    destdir=""   
else   
    destdir="$(pwd)"   
fi 

echo "start to move"
cd "$srcdir"
scandir "$srcdir" "$destdir"
cd "$curdir"
rm -rf "$srcdir"
echo "all finished"

IFS=$BAK_IFS