教程

如何通过 SSH 复制整个目录(scp -r、rsync、sftp)

scp 需要 -r 才能复制文件夹:scp -r ./folder user@host:/path/。大文件或重复传输用 rsync;手机上用 SFTP。常见报错(-r 和大写 -P 的坑)以及该选哪个工具。

CC Chen Chen· 创始人·2026 年 6 月 14 日·阅读 5 分钟

如何通过 SSH 复制整个目录

scp 不会复制文件夹,除非你让它递归——加 -r:

scp -r ./myfolder user@host:/remote/path/

这会复制整棵目录树。对大文件或重复传输,rsync 更好(能续传、跳过没变的文件);手机上一个 SFTP App 一点就传。下面逐个讲,以及常见报错。

scp -r —— 直接法

# 本地文件夹 → 服务器
scp -r ./project user@host:/var/www/

# 服务器文件夹 → 本地
scp -r user@host:/var/log/nginx ./logs

# 非默认端口(注意:大写 -P)
scp -P 2222 -r ./project user@host:/var/www/

多数人踩的坑:scp 的端口用大写 -P(小写 -p 是保留时间戳)。搞混它们就是常见的"scp 不工作"原因。

rsync —— 大文件或重复复制更好

凡是大的、要同步的、或不止跑一次的,用 rsync——它只传变化的部分、被打断也能续:

rsync -avz ./project/ user@host:/var/www/project/

# 带非默认端口或指定密钥:
rsync -avz -e "ssh -p 2222 -i ~/.ssh/mykey" ./project/ user@host:/var/www/project/

-a 保留权限并递归,-v 详细,-z 压缩。注意源末尾的斜杠(project/)——它复制内容;没有斜杠则复制文件夹本身。(rsync 指定密钥见 指定用某把 SSH 密钥。)

sftp —— 交互式,以及 get -r

喜欢浏览的话,sftp 用 get -r 下载目录:

sftp user@host
sftp> get -r /remote/folder

三个工具及各自适用场景见 通过 SSH 传文件。

常见报错

  • "not a regular file" / 什么都没复制——对目录忘了加 -r。
  • 端口错 / connection refused——scp 用大写 -P;查端口。
  • Permission denied——你对目标路径没有写权限,或密钥认证失败(publickey 指南)。

在手机上复制文件夹

在触屏键盘上敲 scp -r 加两个远程路径,正是手机让人头疼的事。一个支持 SFTP 的客户端把它变成浏览:打开服务器的文件系统,选一个文件夹,下载或上传。TermAI 的 SFTP 让你浏览、传输、甚至直接编辑服务器上的文件;要脚本化复制,AI 助手会替你写好对的 scp -r 或 rsync 命令供你复核。

TermAI 建议一条 rsync 命令复制目录
不用在玻璃上敲 scp -r 加两个远程路径——走 SFTP 浏览,或让 AI 写出确切的 rsync/scp 命令。

常见问题

怎么 scp 一个目录?
加 -r 递归:scp -r ./folder user@host:/path/。非默认端口用大写 -P。

为什么 scp 不复制我的文件夹?
没有 -r,scp 拒绝目录("not a regular file")。加 -r。也检查端口是否用了大写 -P。

目录用 scp 还是 rsync?
一次性小复制用 scp -r;凡是大的、重复的、可能被打断的用 rsync——它能续传、跳过没变的文件。

怎么用 sftp 下载目录?
用 sftp user@host 连上,然后跑 get -r /remote/folder。

快速事实

  • scp 复制文件夹:scp -r ./folder user@host:/path/(-r 必需)
  • 端口:scp 用大写 -P(小写 -p = 保留时间)
  • 大的/重复的:rsync -avz src/ user@host:/dest/——续传、跳过没变的
  • sftp:get -r /remote/folder
  • 移动端:走 SFTP 浏览传输,不用敲路径
试试 TermAI

免费上手,iOS 和 Android 都有。免费档每天 5 次 AI,SSH/SFTP 不限量,内置 Tailscale。

CC
Chen Chen — Founder of TermAI

Writes about mobile DevOps, terminal UX, and the surprising depth of "boring" infrastructure.