实用脚本能批量FTP吗?

wen 实用脚本 39

本文目录导读:

实用脚本能批量FTP吗?

  1. 方法一:Shell脚本 + FTP命令(适用于Linux/Unix)
  2. 方法二:使用 lftp 工具(更强大,支持断点续传、并行传输)
  3. 方法三:Python脚本(更灵活,支持复杂逻辑)
  4. 方法四:Windows 批处理脚本(基于ftp.exe
  5. 注意事项
  6. 推荐选择

是的,可以通过实用脚本实现批量FTP操作,常用的方法包括使用 Shell脚本 + FTP命令Python的ftplib库lftp工具,以下是几种常见场景的脚本示例:

Shell脚本 + FTP命令(适用于Linux/Unix)

批量下载文件

#!/bin/bash
# 批量下载FTP服务器上的文件
FTP_HOST="ftp.example.com"
FTP_USER="username"
FTP_PASS="password"
REMOTE_DIR="/remote/path"
LOCAL_DIR="/local/path"
# 创建本地目录
mkdir -p $LOCAL_DIR
# 使用ftp命令批量下载
ftp -n $FTP_HOST <<END_SCRIPT
quote USER $FTP_USER
quote PASS $FTP_PASS
binary
cd $REMOTE_DIR
lcd $LOCAL_DIR
mget *.*
quit
END_SCRIPT
echo "下载完成"

批量上传文件

#!/bin/bash
FTP_HOST="ftp.example.com"
FTP_USER="username"
FTP_PASS="password"
LOCAL_DIR="/local/path/*.txt"
REMOTE_DIR="/remote/path"
ftp -n $FTP_HOST <<END_SCRIPT
quote USER $FTP_USER
quote PASS $FTP_PASS
binary
cd $REMOTE_DIR
mput $LOCAL_DIR
quit
END_SCRIPT

使用 lftp 工具(更强大,支持断点续传、并行传输)

安装lftp(如果未安装)

# Ubuntu/Debian
sudo apt-get install lftp
# CentOS/RHEL
sudo yum install lftp

批量镜像下载(同步整个目录)

lftp -u username,password -e "mirror --parallel=5 /remote/path /local/path; quit" ftp.example.com

批量上传(通配符支持更好)

lftp -u username,password -e "mput -c /local/path/*.csv -o /remote/path/; quit" ftp.example.com

Python脚本(更灵活,支持复杂逻辑)

示例:批量下载,支持重试和日志

import ftplib
import os
def batch_download(host, user, passwd, remote_dir, local_dir, file_pattern='*'):
    try:
        ftp = ftplib.FTP(host)
        ftp.login(user, passwd)
        ftp.cwd(remote_dir)
        # 获取文件列表(可自定义过滤)
        files = ftp.nlst()
        target_files = [f for f in files if f.endswith('.csv')]  # 示例:只下载CSV文件
        os.makedirs(local_dir, exist_ok=True)
        for file in target_files:
            local_path = os.path.join(local_dir, file)
            with open(local_path, 'wb') as f:
                ftp.retrbinary(f'RETR {file}', f.write)
            print(f"下载成功: {file}")
        ftp.quit()
    except Exception as e:
        print(f"错误: {e}")
# 使用示例
batch_download('ftp.example.com', 'username', 'password', '/remote/path', '/local/path')

批量上传带进度显示

import ftplib
import os
from tqdm import tqdm  # 需要 pip install tqdm
def batch_upload(host, user, passwd, local_dir, remote_dir):
    ftp = ftplib.FTP(host)
    ftp.login(user, passwd)
    ftp.cwd(remote_dir)
    files = [f for f in os.listdir(local_dir) if os.path.isfile(os.path.join(local_dir, f))]
    for file in tqdm(files, desc="上传进度"):
        local_path = os.path.join(local_dir, file)
        with open(local_path, 'rb') as f:
            ftp.storbinary(f'STOR {file}', f)
    ftp.quit()
# 使用示例
batch_upload('ftp.example.com', 'username', 'password', '/local/path', '/remote/path')

Windows 批处理脚本(基于ftp.exe

创建 batch_ftp.txt 脚本文件

open ftp.example.com
username
password
binary
cd /remote/path
lcd C:\local\path
mget *.txt
quit

批处理文件 run.bat

@echo off
ftp -s:batch_ftp.txt
echo 批量FTP完成
pause

注意事项

  1. 密码安全:直接在脚本中写密码有风险,建议使用环境变量或加密配置文件
  2. 错误处理:生产环境脚本应添加重试机制、日志记录
  3. 网络问题:大文件建议使用 lftp 支持断点续传
  4. 被动模式:如果遇到连接问题,尝试在FTP命令中加入 passive

推荐选择

  • 简单任务:Shell脚本 + ftp命令
  • 高级功能:lftp(镜像、并行、断点续传)
  • 复杂逻辑:Python ftplib(可扩展性强)
  • Windows环境:批处理 + 第三方工具(如WinSCP命令行)

如果需要处理大量文件或频繁执行,建议考虑 rsync over SSHSFTP(更安全,且原生支持批量同步)。

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