"); //-->
#!/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
*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。