本文目录导读:

- 方法一:Shell脚本 + FTP命令(适用于Linux/Unix)
- 方法二:使用
lftp工具(更强大,支持断点续传、并行传输) - 方法三:Python脚本(更灵活,支持复杂逻辑)
- 方法四:Windows 批处理脚本(基于
ftp.exe) - 注意事项
- 推荐选择
是的,可以通过实用脚本实现批量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
注意事项
- 密码安全:直接在脚本中写密码有风险,建议使用环境变量或加密配置文件
- 错误处理:生产环境脚本应添加重试机制、日志记录
- 网络问题:大文件建议使用
lftp支持断点续传 - 被动模式:如果遇到连接问题,尝试在FTP命令中加入
passive
推荐选择
- 简单任务:Shell脚本 + ftp命令
- 高级功能:lftp(镜像、并行、断点续传)
- 复杂逻辑:Python ftplib(可扩展性强)
- Windows环境:批处理 + 第三方工具(如WinSCP命令行)
如果需要处理大量文件或频繁执行,建议考虑 rsync over SSH 或 SFTP(更安全,且原生支持批量同步)。