Linux环境下仅通过FTP实现目录文件同步的单行命令技术问询
FTP目录同步crontab配置方案
最优工具选择
目前替代ncftpput、wput的最稳定方案是使用lftp工具,其内置的mirror指令专门用于目录双向同步,时间校验逻辑兼容绝大多数标准FTP服务端,完全解决ncftpput -z参数校验不可靠的问题。
前置准备
先安装lftp工具:
- Debian/Ubuntu 系列操作系统:
apt update && apt install -y lftp - RHEL/CentOS 系列操作系统:
yum install -y lftp
单行同步命令
基础同步命令如下,可直接测试执行:
lftp -u "你的FTP用户名","你的FTP密码" -e "mirror -R --only-newer /本地待同步目录 /服务器目标目录; quit" 你的FTP服务器地址
参数说明:
-R:启用反向镜像模式,即把本地文件推送到服务器(默认是把服务器文件拉到本地)--only-newer:仅传输本地比服务端更新的文件,自动跳过未变更的内容,校验逻辑基于标准FTP协议的文件修改时间字段,兼容性远高于ncftpput的非标准-z参数- 可选参数:
- 加
--delete:同步时删除服务端存在但本地不存在的文件,实现两端目录完全一致,不需要可省略 - 加
--ignore-time:如果FTP服务器与本地时间不同步,可添加该参数结合文件大小校验判断是否更新
- 加
Crontab 定时配置示例
如果需要每日凌晨2点执行同步,同时记录日志方便排查问题,执行crontab -e后添加以下行即可:
0 2 * * * lftp -u "your_user","your_pass" -e "mirror -R --only-newer /home/local/source /www/remote/dir; quit" ftp.webxx.at > /var/log/ftp_sync.log 2>&1
安全优化(可选)
如果不想在crontab中明文存储FTP密码,可编辑~/.netrc文件添加以下内容:
machine 你的FTP服务器地址 login 你的FTP用户名 password 你的FTP密码
执行chmod 600 ~/.netrc设置仅当前用户可读,之后同步命令可简化为:
lftp -e "mirror -R --only-newer /本地待同步目录 /服务器目标目录; quit" 你的FTP服务器地址
内容的提问来源于stack exchange,提问作者user855443
相关产品推荐
相关产品推荐

