在 CentOS 上通过 SFTP 批量传输文件,常见有几种做法,按使用场景给你整理一下:
sftp user@host
put *.log
或指定目录:
put /data/*.csv /remote/path/
get *.log
⚠️ 注意:
sftp 不支持 put dir/ 直接传目录mkdir 再 putsftp -b 批处理(推荐 ✅)vi sftp_batch.txt
内容示例:
put /local/path/*.log /remote/path/
put /local/path/file1 /remote/path/
bye
sftp -b sftp_batch.txt user@host
✅ 适合 定时任务 / 脚本自动化
tar czf - /local/dir | sftp user@host
在 sftp 中:
put /dev/stdin /remote/dir.tar.gz
或一行:
tar czf - dir | ssh user@host "cd /remote && tar xzf -"
如果目标机支持 SSH:
rsync -avz /local/dir/ user@host:/remote/dir/
✅ 支持:
ssh-keygen
ssh-copy-id user@host
之后 sftp / rsync 都不用输密码,适合脚本。
| 问题 | 解决 |
|---|---|
| sftp 不能传目录 | 用 tar 或 rsync |
| 中文乱码 | 加 -o 或客户端设置 UTF-8 |
| 权限不足 | 确认远端目录可写 |
如果你能告诉我:
我可以直接给你一份可复制的脚本。