另类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中的内容,实现批量上传/下载文件的功能

posted @ 2024-08-07 16:10  哈喽哈喽111111  阅读(8)  评论(0编辑  收藏  举报