ftp文件上传脚本

简介

在shell脚本中使用ftp命令或者curl命令上传日志文件到ftp服务器,用于定时备份文件到ftp服务器。

ftp上传文件

ftp参数

  • 命令行参数
    -i #使用非交付模式(默认是交互模式,每次操作前会有个提示让你确认)
    -n #不使用当前用户名登录,而是在命令行使用user name passowrd登录

  • 交互参数
    user name password #使用name和password登录服务器
    lcd path #切换本地路径
    cd path #切换服务端路径
    binary #使用二进制传输模式,如果非二进制,传输图片或者可执行文件可能无法打开。
    put local-file [remote-file] #上传本地文件local-file到服务端
    get
    mput filepattern #当前路径下使用正则匹配满足filepattern的文件都会被上传(未执行glob关闭正则)

脚本

#!/bin/bash
ftpserver="ftpserverip"
ftpuser="username"
ftppass="password"

ftpput(){
ftp -i -n $ftpserver<<END     #1>/dev/null 2>/dev/null
user $ftpuser $ftppass
lcd $1
cd  $2
put $3 $4
END
}

loginfo(){
 tt=$(date +"%Y-%m-%d %H:%M:%S :: ")
 echo "$tt $1" >> ~/scripts/backup.log
}

mvlog(){
 loginfo "backup log in $1 to ftpserverip:$2" 
 cd $1   ||  exit 1
 filelist1=$(find . -maxdepth 1  -name "*.gz" -type f -mmin +180) 
 filelist2=$(find . -maxdepth 1 -name "*.zip" -type f  -mmin +180) 
 filelist="$filelist1 $filelist2"
 for ff in ${filelist[@]}
 do
    loginfo "backup $ff"
    fname=`basename $ff`
    ftpput $1 $2 $ff $fname && rm -f $ff
 done
}

mvlog /localpath /destpath

curl上传文件

curl与ftp服务器交互

使用curl的好处是可以使用--limit-rate 1M来限制文件上传速率为1M

#假设ftp服务器ip为ftpserverip,用户名为username,密码为password,要上传的本地文件名为fname
curl  ftp://$ftpserverip/fname -u "$username:$password"  -T "{fname}" --limit-rate 1M

#创建文件夹dirname
curl ftp://$ftpserverip/ -u "$username:$password" -X "MKD dirname"

#删除文件夹
curl ftp://$ftpserverip/ -u "$username:$password" -X "RMD dirname"

#查看ftp服务器文件列表
curl  ftp://$ftpserverip/ -u "$username:$password"

#下载文件
curl  ftp://$ftpserverip/fname -u "$username:$password" -o fname  

mvlog(){
 loginfo "backup log in $1 to ftpserverip:$2"
 cd $1   ||  exit 1
 filelist1=$(find . -maxdepth 1  -name "*.gz" -type f -mmin +180)
 filelist2=$(find . -maxdepth 1 -name "*.zip" -type f  -mmin +180)
 filelist="$filelist1 $filelist2"
 for ff in ${filelist[@]}
 do
    loginfo "backup $ff"
    fname=`basename $ff`
    curl ftp://$ftpserverip/$2/$fname -u "$username:$password"  -T "{$fname}"
 done
}

mvlog /localpath destpath

posted @ 2024-02-18 11:30  董少奇  阅读(142)  评论(0)    收藏  举报