51
Linux FTP 上传一键脚本

下面来介绍一下这个 FTP 上传一键脚本 ftp_upload.sh。

用途:用于在Linux系统下搭建FTP客户端向FTP服务器端上传文件;

总结一下 ftp_upload.sh 特点:
1、支持文件批量上传至 FTP 指定目录;
2、没有了。

1、下载该脚本并赋予执行权限
下载脚本到本地待上传文件的目录下,比如:/data/www/default,如果没有,需要先创建。
创建文件夹的命令为:

cd /data/www/default
wget --no-check-certificate https://github.com/teddysun/across/raw/master/ftp_upload.sh
chmod +x ftp_upload.sh
2、修改并配置脚本
请使用 vim 或 nano 等工具来修改。
关于变量名的一些说明:
LOCALDIR (脚本当前所在目录)
LOGFILE (脚本运行产生的日志文件路径)
FTP_HOST (连接的 FTP 域名或 IP 地址)
FTP_USER (连接的 FTP 的用户名)
FTP_PASS (连接的 FTP 的用户的密码)
FTP_DIR (连接的 FTP 的远程目录,比如: public_html)
一些注意事项的说明:
1)脚本需要用到 ftp 命令,请事先安装好;yum -y install ftp
2)脚本运行产生的日志文件路径不要乱改;
3)脚本需运行在待上传文件的目录下;
4)脚本后面跟含有通配符的参数时,一定要加双引号。

3、脚本运行示例
脚本会显示待上传文件列表,并在最后统计出所需时间。

1)上传当前目录下的文件 filename.tgz

./ftp_upload.sh filename.tgz
2)上传当前目录下的多个文件 filename1.tgz,filename2.tgz,filename3.tgz

./ftp_upload.sh filename1.tgz filename2.tgz filename3.tgz
3)上传当前目录下的通配符文件 *.tgz(注意此时后面跟的参数要加双引号)

./ftp_upload.sh "*.tgz"
4)上传当前目录下的多个通配符文件 *.tgz,*.gz(注意此时后面跟的参数要加双引号)

./ftp_upload.sh "*.tgz" "*.gz"
-----------------------------------------------------------------------------------------
脚本 如下;

#!/usr/bin/env bash
#
# Upload file(s) to FTP server
#
# Copyright (C) 2016 Teddysun <i@teddysun.com>
#
# Argument example:
# 1) ./ftp_upload.sh filename
# 2) ./ftp_upload.sh filename1 filename2 filename3 ...
# 3) ./ftp_upload.sh "*.extension"
# 4) ./ftp_upload.sh "*.extension1" "*.extension2"
#

########## START OF CONFIG ##########

# Local directory (current folder)
LOCALDIR=$( pwd )

# File to log the outcome of backups
LOGFILE="/var/log/ftp_upload.log"

# FTP server
# Enter the Hostname or IP address below
FTP_HOST=""

# FTP username
# Enter the FTP username below
FTP_USER=""

# FTP password
# Enter the username's password below
FTP_PASS=""

# FTP server remote folder
# Enter the FTP remote folder below
# For example: public_html
FTP_DIR=""

########## END OF CONFIG ##########


log() {
echo "$(date "+%Y-%m-%d %H:%M:%S")" "$1"
echo -e "$(date "+%Y-%m-%d %H:%M:%S")" "$1" >> ${LOGFILE}
}

# Check ftp command
check_command() {
if [ ! "$(command -v "ftp")" ]; then
log "ftp command is not installed, please install it and try again"
exit 1
fi
}

# Tranferring backup file to FTP server
ftp_upload() {
cd ${LOCALDIR} || exit

[ -z ${FTP_HOST} ] && log "Error: FTP_HOST can not be empty!" && exit 1
[ -z ${FTP_USER} ] && log "Error: FTP_USER can not be empty!" && exit 1
[ -z ${FTP_PASS} ] && log "Error: FTP_PASS can not be empty!" && exit 1
[ -z ${FTP_DIR} ] && log "Error: FTP_DIR can not be empty!" && exit 1

echo "$@" | grep "*" > /dev/null 2>&1
if [ $? -eq 0 ]; then
ls $@ > /dev/null 2>&1
[ $? -ne 0 ] && log "Error: [$@] file(s) not exists!" && exit 1
else
for f in $@
do
[ ! -f ${f} ] && log "Error: [${f}] not exists!" && exit 1
done
fi

local FTP_OUT_FILE=("$@")

log "Tranferring file(s) list below to FTP server:"
for file in ${FTP_OUT_FILE[@]}
do
log "$file"
done
ftp -in ${FTP_HOST} 2>&1 >> ${LOGFILE} <<EOF
user $FTP_USER $FTP_PASS
binary
lcd $LOCALDIR
cd $FTP_DIR
mput ${FTP_OUT_FILE[@]}
quit
EOF
log "Tranfer to FTP server completed"
}


# Main progress
STARTTIME=$(date +%s)

[ $# -eq 0 ] && log "Error: argument can not be empty!" && exit 1

check_command

ftp_upload "$@"


ENDTIME=$(date +%s)
DURATION=$((ENDTIME - STARTTIME))
log "All done"
log "Transfer completed in ${DURATION} seconds"

--------------------------------------------------------------------------------------------------------------------------------------

此文为转载,原文链接 https://teddysun.com/484.html


这条帮助是否解决了您的问题? 已解决 未解决

提交成功!非常感谢您的反馈,我们会继续努力做到更好! 很抱歉未能解决您的疑问。我们已收到您的反馈意见,同时会及时作出反馈处理!