同事让我帮忙写的脚本。

FTP上每天有更新文件,名字是用日期命名(如日志等),但ftp空间有限,因此要求每天将前一天的文件下载到本地,然后删除ftp上10天前的文件。

用之前的一篇文章加以拼装就能实现:使用curl操作ftp(上传、下载、删除等)

http://www.codigg.com/2009/12/shell-curl-ftp-upload-download-delete/

最后的脚本如下:

#!/bin/sh
 
ftphost=www.codigg.com
ftpuser=blog@codigg.com
ftppwd=password
ftppath=www_logs/
 
url=ftp://$ftphost/$ftppath
 
# 如果已经备份过,则删除ftp上的旧文件,目前是删除10天前的文件
oldday=`date -d '10 days ago' +"%Y%m%d"`
oldfile=`curl -s -u $ftpuser:$ftppwd $url | dos2unix | fgrep $oldday|awk '{print $9}'`
if [[ -n $oldfile && -e $oldfile ]] ; then
  oldurl=$url"$oldfile"
  echo "delete: $oldurl"
  curl -u $ftpuser:$ftppwd -X "DELE $oldfile" $url
fi
 
# 下载新文件,目前是下载前一天的文件
yesterday=`date -d '1 days ago' +"%Y%m%d"`
newfile=`curl -s -u $ftpuser:$ftppwd $url | dos2unix | fgrep $yesterday  |awk '{print $9}'`
if [[ -n $newfile ]] ; then
  newurl=$url"$newfile"
  echo "download:$newurl , save to $newfile"
  curl -u $ftpuser:$ftppwd $newurl -o $newfile
fi

注意:
1. 是用了dos2unix,因为ftp是windows,而备份机是linux
2. 删除远程文件之前先判断本地是否有备份,否则删了就都没了
3. ftppath用/结尾,如果没有则留空