[Shell]依据远端清单进行目录同步
时间:2014-07-23 09:03 来源: 我爱IT技术网 作者:山风
这个任务的状况是:
有些新的文件会被加入,而旧的文件会被移除,文件的内容基本上是不会变动的,所以可透过文件名来进行同步。
文件下载与错误处理:
这里用 curl 来处理下载的问题,并且当发生错误时重试三次。
- #!/bin/bash
- # download_file.sh
- PATH=/bin:/sbin:/usr/bin:/usr/sbin
- export PATH
- LIMIT=3 # retry 3 times
- LOCAL_PATH=$1
- REMOTE_URL=$2
- FILE_NAME=$3
- while [ $LIMIT \> 0 ] ; do
- #echo $REMOTE_URL/$FILE_NAME
- rm -f $LOCAL_PATH/$FILE_NAME.tmp
- curl -f -o $LOCAL_PATH/$FILE_NAME.tmp $REMOTE_URL/$FILE_NAME > /dev/null
- if [ "$?" == "0" ]; then
- mv -f $LOCAL_PATH/$FILE_NAME.tmp $LOCAL_PATH/$FILE_NAME
- exit 0;
- fi
- LIMIT=$(($LIMIT-1))
- done
- exit 1;
清单比较:
从远端下载文件清单与本地端的目录进行比对,并处理删除跟下载的动作。
- #!/bin/bash
- # folder_sync.sh
- PATH=/bin:/sbin:/usr/bin:/usr/sbin
- export PATH
- REMOTE_URL=http://remote_site/pics
- REMOTE_LIST_URL=http://remote_site/pics/file.list
- LOCAL_PATH=/var/www/pics
- # get remote list
- REMOTE_LIST=$(curl -f $REMOTE_LIST_URL |tr -d '\r')
- if [ "$?" != "0" ]; then exit 1; fi
- # get local list
- cd $LOCAL_PATH
- LOCAL_LIST=$(ls -1)
- if [ "$?" != "0" ]; then
- LOCAL_LIST=""
- fi
- # Check loacl file exists in the list
- for ITEM in $LOCAL_LIST ; do
- echo "$REMOTE_LIST" |grep "^$ITEM\$" > /dev/null
- if [ "$?" != "0" ]; then
- # delete old file
- rm -f $ITEM &> /dev/null
- fi
- done
- # Check remote file exists in the list
- for ITEM in $REMOTE_LIST ; do
- echo "$LOCAL_LIST" |grep "^$ITEM\$" > /dev/null
- if [ "$?" != "0" ]; then
- # download new file
- download_file.sh $LOCAL_PATH $REMOTE_URL $ITEM &> /dev/null
- fi
- done
- exit 0;
- 评论列表(网友评论仅供网友表达个人看法,并不表明本站同意其观点或证实其描述)
-
