首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

Shell 中 FTP 自動化腳本編寫:Here Document 交互式批量傳輸實戰

     編輯:MySQL 資料庫相關知識

Shell 腳本中使用 Here Document (<<) 饋送 FTP 子命令,實現非交互式自動化上傳/下載/目錄操作。

核心模板


#!/bin/bash
HOST="172.1.1.1"
USER="username"
PASS="password"
REMOTE_DIR="/list"
LOCAL_FILE="/local/path/filename"
REMOTE_NAME="newfilename"

ftp -n -i "$HOST" << FTP_EOF
user $USER $PASS
cd $REMOTE_DIR
prompt off
binary
put "$LOCAL_FILE" "$REMOTE_NAME"
bye
FTP_EOF

參數解析

進階:錯誤處理與日志記錄


#!/bin/bash
LOG_FILE="/var/log/ftp_upload_$(date +%F).log"
exec >> "$LOG_FILE" 2>&1

echo "=== $(date) 開始 FTP 上傳 ==="
if ftp -n -i "$HOST" << FTP_EOF 2>&1; then
    user $USER $PASS
    cd $REMOTE_DIR
    binary
    put "$LOCAL_FILE" "$REMOTE_NAME"
    bye
FTP_EOF
then
    echo "✅ 上傳成功"
else
    echo "❌ 上傳失敗,退出碼: $?"
    # 發送告警
    curl -X POST -d "text=FTP上傳失敗: $HOST $LOCAL_FILE" "$ALERT_WEBHOOK"
fi
echo "=== $(date) 結束 ==="

現代化替代:SFTP/SCP + SSH Key (更安全、無明文密碼)


# 1. 生成密鑰對 (免密登錄)
ssh-keygen -t ed25519
ssh-copy-id user@host

# 2. SCP 單文件
scp /local/file user@host:/remote/path/

# 3. SFTP 批量 (Here Document 同理)
sftp -b - user@host << SFTP_EOF
cd /remote/dir
put /local/file
bye
SFTP_EOF

# 4. rsync 增量同步 (生產首選)
rsync -avz --progress /local/dir/ user@host:/remote/dir/

核心優勢:加密傳輸、密鑰認證、斷點續傳、帶寬限制、完整性校驗。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
參數含義
-n禁用自動登錄 (.netrc),由腳本手動發送 user 命令
-i關閉交互式提示 (mput/mget 確認)
prompt offFTP 內部關閉多文件傳輸確認提示
binary二進制傳輸模式 (保證圖片/壓縮包不損壞),對應 ascii 文本模式
put local remote上傳單文件
get remote local下載單文件
mput *.log批量上傳 (配合 prompt off)
lcd /local/dir切換本地工作目錄