另类ftp传输文件的用法
环境介绍
1.ftp服务器,使用软件FileZilla Server进行部署的,启动该软件后创建一个test用户,设置密码,并设置一个文件目录,勾选上该用户对文件目录的权限
注意:ftp上的其他设置均为默认,没有勾选上被动模式
ip:192.168.10.103
用户名:test
密码:123456
2.ftp客户端
使用软件VMware Workstation Pro安装了一个centos7.9的系统,已经事先安装好ftp软件了
yum -y install ftp
相关文件内容:
文件1,文件名:run_push.sh
#!/bin/bash
basedir=/usr/local/src/test_ftp
ftpip=192.168.10.103
user=""
psword=""
filename=""
while getopts i:u:p:f: arg
do
case $arg in
i)
ftpip=$OPTARG
;;
u)
user=$OPTARG
;;
p)
psword=$OPTARG
;;
f)
filename=$OPTARG
esac
done
cd $basedir/file
echo $ftpip $user $psword $filename
sed -e "s/@file/$filename/g" -e "s/@user/$user/g" -e "s/@psword/$psword/g" ../zbf.ftp > ../zbf1.ftp
ftp -n $ftpip < ../zbf1.ftp
文件2,文件名:zbf.ftp (注意该文件中的换行符是unix,不是windows下的,否则执行脚本的时候会提示无效的命令)
user @user @psword
bin
mput @file
bye
执行命令:
chmod a+x run_push.sh
bash run_push.sh -i 192.168.10.103 -u test -p 123456 -f rlwrap-0.42.tar.gz
命令步骤分析:
给脚本增加可执行权限,然后在执行脚本的时候传递参数进去,脚本中设置的有接受这些参数的变量,然后使用sed命令把传递过来的实际变量值根据文件名:zbf.ftp中的默认值,并生成一个新的文件zbf1.ftp
然后使用ftp命令根据zbf1.ftp文件的内容,自动登录ftp服务器上,并上传文件,然后退出ftp
说明:因为虚拟机centos7.9的出口ip是本机的,因此日志中显示登录ftp服务器的ip是本机:192.168.10.103,若是换成其他主机,则ftp服务器日志中显示的则是执行脚本所在主机的IP
执行脚本的时候需要传递参数,使用定时任务有些不太方便,此时可以再创建一个新的脚本,在这个脚本中执行调用run_push.sh,比如:
脚本:run.sh
#!/bin/bash
ftpip="192.168.10.103"
user="test"
psword="123456"
destdir=""
filename="rlwrap-0.42.tar.gz"
today=$(date +"%Y%m%d %H:%M:%S")
date=$(date +"%Y%m%d")
tmp_filename1="xxxx"
filename1="xxxx"$date".txt"
date=$(date +"%Y%m%d")
tmp_filename1="xxxx"
filename1="xxxx"$date".txt"
echo $filename1
xxxx20240807.txt
# 文件名也可以使用带有当前日期的那种进行拼接构造后传递,比如:filename1
bash run_push.sh -i $ftpip -u $user -p psword -f $filename
引申使用:把脚本添加到定时任务里,然后就可以定时拉取或推送最新的文件到指定的ftp服务器里.或者进一步完善zbf.ftp中的内容,实现批量上传/下载文件的功能