如何批量归档SFTP目录文件并一次性移动至另一SFTP目录?
可行方案汇总
情况1:源目录与目标目录在同一SFTP服务器(且拥有服务器shell访问权限)
这是最高效的处理方式,直接在服务器端完成归档+移动,完全无需逐个操作文件:
- 登录到SFTP服务器的shell终端
- 执行归档命令,将源目录下所有文件打包成带日期标记的压缩包:
tar -czf daily_archive_$(date +%Y%m%d).tar.gz /path/to/source_folder/* - 将归档包移动到目标SFTP目录:
mv daily_archive_$(date +%Y%m%d).tar.gz /path/to/target_folder/ - (可选)清空源目录下的原文件:
rm /path/to/source_folder/*
情况2:源目录与目标目录在同一SFTP服务器(无shell权限,仅能通过SFTP协议操作)
使用支持批量命令的SFTP客户端工具(如lftp),通过脚本一次性执行操作:
创建lftp脚本文件(例如sftp_batch_task.lft):
open sftp://username:password@your-sftp-server cd /path/to/source_folder # 调用服务器端tar命令(需确认服务器允许exec操作) exec tar -czf /tmp/daily_archive.tar.gz * mv /tmp/daily_archive.tar.gz /path/to/target_folder/ exec rm /path/to/source_folder/* exit
执行脚本:
lftp -f sftp_batch_task.lft
情况3:源目录与目标目录在不同SFTP服务器
借助rsync(兼容SSH/SFTP协议)完成批量同步、归档与迁移:
- 批量同步源服务器文件到本地临时目录:
rsync -avz sftp://source-user@source-server:/path/to/source_folder/ /local/temp/archive_dir/ - 本地生成归档包:
tar -czf daily_archive_$(date +%Y%m%d).tar.gz /local/temp/archive_dir/* - 将归档包上传到目标服务器:
rsync -avz daily_archive_$(date +%Y%m%d).tar.gz sftp://target-user@target-server:/path/to/target_folder/ - (可选)批量清空源服务器的原文件:
rsync -avz --delete --include='*' --exclude='.' --exclude='..' /dev/null sftp://source-user@source-server:/path/to/source_folder/
内容的提问来源于stack exchange,提问作者james11
相关产品推荐
相关产品推荐

