哪些实用脚本能简化FTP上传下载?

wen 实用脚本 3

本文目录导读:

哪些实用脚本能简化FTP上传下载?

  1. 基础FTP脚本(Windows批处理)
  2. Shell脚本(Linux/Mac)
  3. 使用lftp(更强大的工具,需要安装)
  4. Python脚本(跨平台)
  5. PowerShell脚本(Windows)
  6. 带日志和错误处理的增强版Shell脚本
  7. 使用建议

基础FTP脚本(Windows批处理)

@echo off
REM FTP上传脚本 - Windows
set FTP_HOST=ftp.example.com
set FTP_USER=username
set FTP_PASS=password
set LOCAL_DIR=C:\local\folder\
set REMOTE_DIR=/remote/folder/
echo user %FTP_USER%> ftp_commands.txt
echo %FTP_PASS%>> ftp_commands.txt
echo cd %REMOTE_DIR%>> ftp_commands.txt
echo binary>> ftp_commands.txt
echo lcd %LOCAL_DIR%>> ftp_commands.txt
echo mput *.*>> ftp_commands.txt
echo quit>> ftp_commands.txt
ftp -s:ftp_commands.txt %FTP_HOST%
del ftp_commands.txt

Shell脚本(Linux/Mac)

#!/bin/bash
# FTP下载脚本
HOST="ftp.example.com"
USER="username"
PASS="password"
REMOTE_DIR="/remote/path/"
LOCAL_DIR="/local/path/"
FILE="important_file.txt"
ftp -n $HOST << EOF
quote USER $USER
quote PASS $PASS
lcd $LOCAL_DIR
cd $REMOTE_DIR
binary
get $FILE
quit
EOF

使用lftp(更强大的工具,需要安装)

#!/bin/bash
# 使用lftp的高级脚本
HOST="ftp.example.com"
USER="username"
PASS="password"
lftp -u $USER,$PASS $HOST << EOF
mirror --verbose --parallel=3 \
  /remote/source/ /local/destination/
quit
EOF

Python脚本(跨平台)

#!/usr/bin/env python3
# ftp_upload.py
from ftplib import FTP
import os
def upload_file(host, user, passwd, local_file, remote_dir):
    with FTP(host) as ftp:
        ftp.login(user, passwd)
        ftp.cwd(remote_dir)
        with open(local_file, 'rb') as f:
            ftp.storbinary(f'STOR {os.path.basename(local_file)}', f)
def download_file(host, user, passwd, remote_file, local_dir):
    with FTP(host) as ftp:
        ftp.login(user, passwd)
        local_path = os.path.join(local_dir, os.path.basename(remote_file))
        with open(local_path, 'wb') as f:
            ftp.retrbinary(f'RETR {remote_file}', f.write)
# 使用示例
upload_file('ftp.example.com', 'user', 'pass', 'test.txt', '/upload/')
download_file('ftp.example.com', 'user', 'pass', '/download/report.csv', './')

PowerShell脚本(Windows)

# FTP上传脚本 - PowerShell
$ftpServer = "ftp.example.com"
$ftpUser = "username"
$ftpPass = "password"
$localFile = "C:\files\data.txt"
$remoteFile = "/upload/data.txt"
$ftp = [System.Net.FtpWebRequest]::Create("ftp://$ftpServer$remoteFile")
$ftp.Credentials = New-Object System.Net.NetworkCredential($ftpUser, $ftpPass)
$ftp.Method = [System.Net.WebRequestMethods+Ftp]::UploadFile
$fileContent = [System.IO.File]::ReadAllBytes($localFile)
$ftp.ContentLength = $fileContent.Length
$requestStream = $ftp.GetRequestStream()
$requestStream.Write($fileContent, 0, $fileContent.Length)
$requestStream.Close()
$response = $ftp.GetResponse()
Write-Host "Upload completed: $($response.StatusDescription)"

带日志和错误处理的增强版Shell脚本

#!/bin/bash
# 带日志的FTP同步脚本
LOG_FILE="/var/log/ftp_sync.log"
HOST="ftp.example.com"
USER="username"
PASS="password"
REMOTE_DIR="/backups/"
LOCAL_DIR="/data/backups/"
log() {
    echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" >> $LOG_FILE
}
# 检查网络连接
if ! ping -c 1 $HOST &> /dev/null; then
    log "ERROR: Cannot reach FTP server $HOST"
    exit 1
fi
# 开始同步
log "Starting FTP sync from $LOCAL_DIR to $HOST:$REMOTE_DIR"
cd $LOCAL_DIR
ftp -n $HOST << EOF &>> $LOG_FILE
quote USER $USER
quote PASS $PASS
cd $REMOTE_DIR
binary
prompt off
mput *
quit
EOF
if [ $? -eq 0 ]; then
    log "Sync completed successfully"
else
    log "ERROR: Sync failed with exit code $?"
    exit 1
fi

使用建议

  1. 安全性:避免在脚本中硬编码密码,可考虑使用:

    • 环境变量
    • 加密的配置文件
    • .netrc文件
  2. 错误处理:生产环境脚本应包含完善的错误处理和日志记录

  3. 批量处理:使用mget/mputmirror命令处理多个文件

  4. 连接测试:先测试连接是否可用再开始传输

  5. 定时任务:结合cron(Linux)或任务计划程序(Windows)实现自动化

选择哪种脚本取决于你的操作系统环境、具体需求和可用的工具,Python脚本提供了最好的跨平台兼容性,而lftp则提供了最强大的功能集。

抱歉,评论功能暂时关闭!