shell脚本中的实时ftp传输实例

背景:对数据对接的同事来说,经常会遇到,要实时的去对方服务器下取文件的情况,本文介绍一个,ftp实施取文件的脚本实例。

*/1 * * * * test.sh &  //crontab定时,脚本每分钟执行一次

脚本内容如下:

#!/bin/bash

cd /dir      //本机路径

#对与一整套的ftp操作常常要放到<<! 内容!这种格式下,把内容作为一个子输入,执行完成后再返回主shell

ftp -n -v ip地址 21 <<!
    user 账户 密码
    binary  //使用二进制传输
    passive  //进入被动传输
    prompt  //关掉交互方式
    cd dir  //远程路径
    nlist *.txt log_1.txt  //将文件列表保存到本机
    close
    bye

!

//下边是个小技巧这里只取没用下载过的文件

comm -3 log_1.txt log_2txt > log_3.txt  //取两个文件的差放到log_3
num="`cat log_3.txt|wc -l`"  //文件个数
cat log_1.txt >log_2.txt
//将文件循环下载下来
for  ((i=1;i<=$num;i++));
do
    str=`cat log.txt | tail -n +$i | head -n 1`
     ftp -n -v ip地址 21 <<!
          user 账户 密码
          binary
          passive
          prompt
          cd dir  //远程路径
          lcd dir  //本机路径
          get $str //下载文件
          close
          bye
    !

done

注意:

get一次只下载一个文件;mget一次可以下载多个文件,而且支持通配符,需要注意的是在mget的时侯,需要对每一个文件都选择y/n,如果想不交互的下载全部的文件,可以先用prompt命令关掉交互方式(关闭:prompt off;打开:prompt on)。

采用二进制传输。如果你要上传下载,这一步很重要,不先执行这个命令,上传下载会很慢。大多数系统(包括UNIX系统)只有两种模式:文本模式和二进制模式。文本传输器使用ASCII字符,并由回车键和换行符分开,而二进制不用转换或格式化就可传字符,二进制模式比文本模式更快,并且可以传输所有ASCII值,所以系统管理员一般将FTP设置成二进制模式。一般来说,我们最好都用binary方式,这样可以保证不出错。

附几个常用命令

cd进入远程主机目录的父目录。
close中断与远程服务器的ftp会话
delete file.txt:删除远程机器文件。
mdelete 删除多个远程主机文件。
get file.txt 下载文件
put 上传文件
mput 将多个文件传输至远程主机。
mget下载多个远程文件
help显示ftp内部命令的帮助信息
lcd将本地工作目录切换至dir。
ls显示远程目录
nlist显示远程主机目录的文件清单,并存入本地硬盘
prompt设置多个文件传输时的交互提示。
pwd显示远程主机的当前工作目录。
rename更改远程主机文件名。
rmdir dirname删除远程主机目录。
size filename显示远程主机文件大小
status显示当前ftp状态。

个人观点,欢迎指正

本人原创,转载请注明出处

猜你喜欢

转载自blog.csdn.net/qq_34485930/article/details/79916169