新闻  |   论坛  |   博客  |   在线研讨会
synchronize folders
0750long | 2009-07-15 13:31:55    阅读:1480   发布文章

synchronize folders

 

#!/bin/sh

#synchronize folders
show_usage() {
    echo "Usage:"
    echo "  synch_folder [-e NAME] src_folder des_folder"
    echo ""
    echo "    Copy files from src_folder to des_folder. If -e NAME is given, the"
    echo "    files or sub-folders with this name won't be copied."
    echo ""
    echo "Synchronize folders, write by Oliver Nie."
    return 1
}


#validate the parameter number

if
[ $# -lt 2 ]; then
    show_usage
    exit 1
fi

#validate the parameter number
if
[ $1 = "-e" ] && [ $# -lt 4 ]; then
    echo "Two folders must be given."
    show_usage
    exit 1
fi

#get the parameters
if
[ $1 = "-e" ]; then
    ex_name=$2
    src=$3
    des=$4
else

    src=$1
    des=$2
fi

if
[ ! -e $src ] || [ ! -e $des ]; then
    echo "Folder $src or $des is not existed."
    show_usage
    exit 1
fi


#output the file list

if
[ -z $ex_name ]; then
    pushd $src
    find . -print | sed "s/\.\///g"  | sort > ../src_list
    popd
    pushd $des
    find . -print | sed "s/\.\///g"  | sort > ../des_list
    popd
else
 # supress the given name
    pushd $src
    find . -path "*$ex_name" -prune -o -print | sed "s/\.\///g" | sort > ../src_list
    popd
    pushd $des
    find . -path "*$ex_name" -prune -o -print | sed "s/\.\///g" | sort > ../des_list
    popd
fi

cnt=0
# file list in both folders

for
i in `comm -12 src_list des_list`; do
    if [ -d "$src/$i" ]; then
        continue
    else
        cp $src/$i $des/$i -f
        cnt=`expr $cnt + 1`
    fi
done

#echo "Total $cnt files copied!"
# file list only in source folder
for i in `comm -23 src_list des_list`; do
    if [ -d "$src/$i" ]; then
        mkdir $des/$i
        continue
    fi
    cp $src/$i $des/$i -f
    cnt=`expr $cnt + 1`
done


echo
"Total $cnt files copied!"

rm
src_list des_list

*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。

参与讨论
登录后参与讨论
推荐文章
最近访客