1. 程式人生 > 實用技巧 >sftp 上傳下載指令碼

sftp 上傳下載指令碼

概述

因公司專案由之前的ftp換位sftp,且之前的UDP函式未開發出來,使用指令碼實現部分功能(sftp檔案下載)。一次連線和多次連線均為指定檔名下載,下載最新的檔案即下載修改時間最新的檔案,因每天最多更新一份,在下載最新檔案指令碼中以天為單位。指令碼內容如下。

一次連線

#!/bin/bash
#  -------------+---------------------------------
# * Filename    :       sftp_download_nowfile.sh
# * Date        :       2020-08-24 
# * Author      :       wangjianxiong           
# 
* Description : # -------------+--------------------------------- MYPATH=$(dirname $0) MYPWD=`cd $MYPATH/../ && pwd` IP=59.255.188.30 PORT=5522 USER=ftpuser PASSWORD=!QAZ2wsx12345 SFTPDIR=/data/file/xy FILE_NAME=20200818.zip find $MYPWD/data -type f -name "*" -exec rm -rf {} \; [
-f sftp_get.sh ] && rm -rf sftp_get.sh echo "lftp -u '${USER}','${PASSWORD}' sftp://${IP}:${PORT} <<EOF" >> sftp_get.sh cat $MYPATH/../conf/list_dir | awk -F"." '{print $NF}' > new_list for i in `cat new_list` do lpath=`cd $MYPWD/data$i; pwd` rpath=$SFTPDIR$i echo "cd $rpath
" >> sftp_get.sh echo "lcd $lpath" >> sftp_get.sh echo "get $FILE_NAME" >> sftp_get.sh done echo "bye" >> sftp_get.sh echo "EOF" >> sftp_get.sh chmod a+x sftp_get.sh
View Code

多次連線

for迴圈實現

#!/bin/bash
#  -------------+---------------------------------
# * Filename    :       sftp_download_nowfile.sh
# * Date        :       2020-08-24 
# * Author      :       wangjianxiong           
# * Description :                       
#  -------------+---------------------------------

MYPATH=$(dirname $0)
MYPWD=`cd $MYPATH/../ && pwd`

IP=59.255.188.30
PORT=5522
USER=ftpuser
PASSWORD=!QAZ2wsx12345

SFTPDIR=/data/file/xy
FILE_NAME=20200818.zip

find $MYPWD/data -type f -name "*" -exec rm -rf {} \;

cat $MYPATH/../conf/list_dir | awk -F"." '{print $NF}' > new_list
for i in `cat new_list`
do
    sleep 1

    lpath=`cd $MYPWD/data$i; pwd`
    rpath=$SFTPDIR$i

    lftp -u '${USER}','${PASSWORD}' sftp://${IP}:${PORT} <<EOF
    cd $rpath
    lcd $lpath
    get $FILE_NAME
    bye
EOF
done
View Code

下載最新檔案

for 巢狀 while

#!/bin/bash
#  -------------+---------------------------------
# * Filename    :       lftp_get.sh
# * Date        :       2020-08-28
# * Author      :       wangjianxiong
# * Description :
#  -------------+---------------------------------

MYPATH=$(dirname $0)
MYPWD=`cd $MYPATH/../ && pwd`

SFTPDIR=/data/file/xy

find $MYPWD/data -type f -name "*" -exec rm -rf {} \;

cat $MYPATH/../conf/list_dir | awk -F"." '{print $NF}' > new_list
for i in `cat new_list`
do
    lpath=`cd $MYPWD/data$i; pwd`
    rpath=$SFTPDIR$i

    i=0
    while true
    do
        lftp -u 'ftpuser','!QAZ2wsx12345' sftp://59.255.188.30:5522 <<EOF
        mirror  --newer-than='now-${i}day' --only-newer --verbose $rpath $lpath
        bye
EOF

    ret=`ls $lpath`
    if [ "`ls -A $lpath`" = "" ]; then
        i=$(($i+1))
    else
        break
    fi
    done
done
View Code