在 mac系统 上连接 FTP服务器 可以通过 Finder(前往→连接服务器 smb/ftp://host)、终端自带的 ftp/curl 工具,或安装工具如 lftp、curlftpfs。推荐使用命令行工具配合脚本实现 自动化:首先确认服务器地址、端口(默认21)、用户名和密码,以及是否需要被动模式(PASV)。
如果是明文 FTP,请在防火墙与路由器上放行端口;若支持 FTPS/SFTP,优先使用加密方式。可以把登录信息保存在 mac 的 Keychain 中以便脚本读取,或通过环境变量传递,避免在脚本中明文写密码。
用 lftp 时可在配置里启用自动重连和镜像同步,适合批量传输场景。
推荐使用 lftp 实现稳定的批量传输,示例脚本如下(放在 p 标签内作为示例):
#!/bin/bash
HOST="ftp.example.com"
USER="username"
PASS="password"
REMOTE_DIR="/remote/path"
LOCAL_DIR="/local/path"
lftp -u $USER,$PASS $HOST -e "set ftp:passive-mode on; mirror -R $LOCAL_DIR $REMOTE_DIR; bye"
上述脚本使用 lftp 的 mirror 命令将本地目录批量上传到远端。若要下载,把 mirror -R 改为 mirror 即可。可加上 --parallel=5 来并行传输多个文件以提高速度。
注意本地和远端目录权限、字符编码(文件名有中文时注意编码转换),并确保脚本有执行权限(chmod +x 脚本名)。
macOS 推荐使用 launchd(LaunchAgents/LaunchDaemons)来定时执行脚本,而不是传统 cron。创建一个 plist 文件放在 ~/Library/LaunchAgents,例如 com.example.ftpsync.plist,然后用 launchctl load 来加载。
<?xml version="1.0"?>
<plist version="1.0">
<dict>
<key>Label</key><string>com.example.ftpsync</string>
<key>ProgramArguments</key><array><string>/path/to/your/script.sh</string></array>
<key>StartInterval</key><integer>3600</integer>
</dict>
</plist>
放置后运行 launchctl load ~/Library/LaunchAgents/com.example.ftpsync.plist,并用 launchctl list 查看状态;脚本的输出建议重定向到日志文件便于排错。
连接被拒绝(Connection refused)、超时、权限不足、被动/主动模式错误导致数据连接失败、中文文件名乱码、证书校验失败(FTPS)等。
1. 用命令行手动连接测试(ftp/lftp/curl)确认账户和网络通畅。 2. 切换被动/主动模式测试。 3. 查看防火墙与 NAT 规则是否阻断数据端口。 4. 检查脚本日志、lftp debug 输出(lftp -d)。
在脚本中把 stdout/stderr 重定向到指定日志文件,并记录开始/结束时间、传输文件清单、错误代码,便于长期维护与告警。
尽量使用 SFTP(基于 SSH)或 FTPS(FTP+TLS)替代明文 FTP,以保护用户名密码和文件内容。若必须用 FTP,则通过 VPN 或内网进行传输,并限制服务器 IP 白名单。
使用并行传输(lftp --parallel),压缩小文件为归档后传输(tar/gzip),减少握手开销。对于大量小文件可先打包再传,或采用 rsync over SSH 实现增量同步。
定时清理临时文件、监控传输失败率并设置告警、为关键脚本加入重试与回滚机制,确保在批量传输任务中具备可观测性和可恢复性。