如何使用Python或命令行自动执行ncftp的open、get -R等FTP操作命令
ncftp自动化执行操作的实现方案
方案一:命令行/shell脚本实现
你可以直接通过shell的重定向特性把批量命令传给ncftp执行,示例脚本如下:
#!/bin/bash # 批量执行ncftp命令 ncftp << EOF open ftp://你的FTP账号:你的FTP密码@FTP服务器地址 get -R 目标Folder quit EOF
如果只是要递归下载单个目录,可以直接用ncftp配套的ncftpget工具,一行命令即可完成:
ncftpget -R -u 你的FTP账号 -p 你的FTP密码 FTP服务器地址 本地保存路径 远程Folder路径
注意事项:
- 若账号密码包含特殊字符,需要提前做转义处理
- 不想明文写密码的话,可以先通过ncftp的书签功能把站点信息存在本地,直接
open 书签名即可调用,无需填写账号密码- 注意
open后的FTP地址前缀为ftp://,不要遗漏冒号
方案二:Python实现
方式1:调用subprocess执行ncftp命令
适合你已经习惯ncftp操作语法的场景:
import subprocess # 填写你要执行的ncftp批量命令 ncftp_commands = """ open ftp://你的FTP账号:你的FTP密码@FTP服务器地址 get -R 目标Folder quit """ # 启动ncftp进程并传入命令 process = subprocess.Popen("ncftp", stdin=subprocess.PIPE, shell=True) process.communicate(input=ncftp_commands.encode("utf-8"))
方式2:使用Python内置ftplib实现(无需依赖ncftp)
如果环境里不能安装ncftp,可以直接用Python标准库的ftplib完成FTP操作,递归下载目录的示例代码如下:
from ftplib import FTP import os def recursive_download(ftp_obj: FTP, remote_dir: str, local_dir: str): # 本地创建对应目录 os.makedirs(local_dir, exist_ok=True) ftp_obj.cwd(remote_dir) # 遍历远程目录所有内容 for item in ftp_obj.nlst(): try: # 尝试进入路径判断是否为文件夹 ftp_obj.cwd(item) ftp_obj.cwd("..") # 递归下载子文件夹 recursive_download(ftp_obj, item, os.path.join(local_dir, item)) except Exception: # 非文件夹则直接下载文件 local_file = os.path.join(local_dir, item) with open(local_file, "wb") as f: ftp_obj.retrbinary(f"RETR {item}", f.write) if __name__ == "__main__": # 初始化FTP连接 ftp = FTP("FTP服务器地址") ftp.login(user="你的FTP账号", passwd="你的FTP密码") # 递归下载目标文件夹 recursive_download(ftp, "目标Folder", "./本地保存路径") ftp.quit()
额外说明:
- 密码不要硬编码在脚本中,建议通过环境变量、加密配置文件等方式读取
- 如果使用FTPS协议,将代码中的
FTP替换为ftplib.FTP_TLS即可适配- 网络不稳定的场景可以自行添加上传重试、断点续传逻辑
内容的提问来源于stack exchange,提问作者user232560
相关产品推荐
相关产品推荐

