在 Linux 下使用 SFTP 批量操作,常见有几种方式,按“是否交互”和“是否脚本化”来区分:
sftp + 批处理文件(推荐)适合:上传/下载多个文件、定时任务
写法:
sftp -b batch.txt user@host
batch.txt 示例:
cd /remote/path
lcd /local/path
put file1.txt
put file2.txt
get remote.log
bye
常用命令:
put 上传get 下载mput / mget 批量(支持通配符)rm / mkdir / rmdirecho "put *.txt" | sftp user@host:/remote/path
或:
sftp user@host <<EOF
cd /data
mput *.log
bye
EOF
ssh-keygen
ssh-copy-id user@host
之后 sftp 不再需要密码。
sshpass -p 'password' sftp -b batch.txt user@host
lftp(更强大的批量工具 ✅✅)适合:镜像同步、递归上传下载
lftp sftp://user@host -e "mirror -R local_dir remote_dir; bye"
常用:
mirror 下载目录mirror -R 上传目录rsync(最推荐,若允许)如果服务器支持 SSH:
rsync -avz ./local/ user@host:/remote/
✅ 支持增量
✅ 支持目录递归
✅ 生产环境首选
sftp -b - user@host <<EOF
mkdir /backup
cd /backup
lcd ./data
mput *
bye
EOF
sftp user@host <<EOF
cd /var/log
mget app-*.log
bye
EOF
| 场景 | 推荐方式 |
|---|---|
| 简单批量 | sftp -b |
| 目录同步 | lftp / rsync |
| 自动化 | SSH 密钥 + 脚本 |
| 最安全 | rsync over SSH |
如果你有具体需求(如:批量上传某类文件 / 定时同步 / 服务器限制),可以告诉我,我可以直接帮你写脚本。