zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    多线程的同步锁和死锁
    多线程同步
    oracle11g导出表时会发现少表,空表导不出解决方案
    GET和POST两种基本请求方法的区别
    数据库优化
    JavaScript中的基本数据类型
    Spring Data Jpa简单了解
    单例和多例详解
    jsp九大内置对象
    JavaEE 前后端分离以及优缺点
  • 原文地址:https://www.cnblogs.com/yunweis/p/7727156.html
Copyright © 2011-2022 走看看