基本连接和操作
在使用 SFTP 下载文件之前,你首先需要连接到远程服务器。

连接到服务器
打开你的终端(在 Windows 上可以使用 PowerShell, WSL 或 PuTTY),然后输入:
sftp [username]@[remote_host]
[username]:你的远程服务器用户名。[remote_host]:服务器的 IP 地址或域名。
示例:
sftp john@example.com
连接成功后,你会看到 sftp> 提示符,表示你现在已经进入了 SFTP 命令行环境。
核心 SFTP 下载命令
在 sftp> 提示符下,你可以使用以下命令来下载文件和目录。

下载单个文件 (get)
这是最常用的下载命令。
语法:
get [remote_file] [local_file]
[remote_file]:远程服务器上的文件路径。[local_file]:本地保存的文件路径(可选),如果省略,文件将使用与远程相同的名称保存在当前本地目录。
示例:
-
下载远程文件
report.pdf到当前本地目录:
(图片来源网络,侵删)sftp> get report.pdf
-
下载远程文件
report.pdf并重命名为local_report.pdf:sftp> get report.pdf local_report.pdf
-
下载远程
/home/john/docs/report.pdf到本地当前目录:sftp> get /home/john/docs/report.pdf
下载整个目录 (get -r)
要下载一个目录及其所有内容,需要使用 -r (recursive) 选项。
语法:
get -r [remote_directory] [local_directory]
[remote_directory]:远程服务器上的目录路径。[local_directory]:本地保存的目录路径(可选),如果省略,目录将使用与远程相同的名称保存在当前本地目录。
示例:
-
下载远程
my_project目录到本地当前目录:sftp> get -r my_project
-
下载远程
my_project目录并重命名为project_backup:sftp> get -r my_project project_backup
实用 SFTP 下载技巧与高级选项
在实际工作中,你可能需要更精细的控制。
查看和切换目录
在下载文件前,你需要确保在正确的远程和本地目录下。
ls [remote_path]:列出远程目录内容。sftp> ls /home/john/docs/
cd [remote_path]:切换远程工作目录。sftp> cd /var/www/html
pwd:显示当前远程工作目录。sftp> pwd # 输出: Remote working directory: /var/www/html
lpwd:显示当前本地工作目录。sftp> lpwd # 输出: /Users/yourname/Downloads
lcd [local_path]:切换本地工作目录。sftp> lcd ~/Desktop
最佳实践: 在下载前,先用 cd 和 lcd 切换到正确的远程和本地目录,这样 get 命令就可以使用简短的文件名。
下载时设置文件权限 (get -P)
-P 选项可以让你在下载时保留或设置文件的原始权限(权限位)。
语法:
get -P [remote_file]
示例:
sftp> get -P script.sh
下载时限制速率 (get -S)
如果网络环境敏感,你可以限制 SFTP 下载的速率,避免占用过多带宽。
语法:
get -S [rate] [remote_file]
[rate]:速率,单位可以是K,M,G(100K,1M)。
示例:
# 限制下载速率为 100KB/s sftp> get -S 100K large_file.zip
断点续传 (get -a)
如果下载大文件时网络中断,可以使用 -a 选项(--append)从上次中断的地方继续下载,而不是重新开始。
语法:
get -a [remote_file]
示例:
# 假设之前下载 movie.iso 中断了 sftp> get -a movie.iso
完整操作示例
下面是一个完整的 SFTP 会话示例,展示了从连接到下载文件的完整流程。
# 1. 连接到服务器 $ sftp john@example.com Connecting to example.com... john@example.com's password: ******** Welcome to SFTP ... sftp> # 2. 查看远程服务器上的文件 sftp> ls docs public_html report.pdf temp # 3. 切换到包含目标文件的远程目录 sftp> cd docs sftp> pwd Remote working directory: /home/john/docs # 4. 查看本地当前目录 sftp> lpwd Local working directory: /Users/john/Downloads # 5. 下载 'project_files' 目录(递归) sftp> get -r project_files Fetching /home/john/docs/project_files to project_files ... receiving file list ... done ... sent 12345 bytes received 67890 bytes 12345.00 bytes/sec total size is 12345678 speedup is 123.45 # 6. 下载单个文件 'report.pdf' sftp> get report.pdf Fetching /home/john/docs/report.pdf to report.pdf /reports/report.pdf 100% 256KB 256.0KB/s 00:00 # 7. 退出 SFTP 会话 sftp> exit
从命令行直接执行(单行命令)
你不想进入交互式 SFTP 环境,只想快速执行一个下载命令,这时可以使用 sftp 命令的单行模式。
语法:
sftp [username]@[remote_host] "get [remote_file] [local_file]; exit"
示例:
# 从 example.com 下载 report.pdf 到当前目录,然后退出 sftp john@example.com "get report.pdf; exit"
这种方式非常适合在脚本(如 Shell 脚本)中自动化文件传输。
常见问题与解决
get: unexpected failure:这通常是由于权限不足或文件路径错误导致的,请检查远程文件是否存在,以及你的用户是否有读取权限。Permission denied:确认你的 SFTP 用户对目标文件或目录有读取权限。sftp>提示符下无法使用ls -l:标准的ls -l在某些 SFTP 客户端中可能不被支持,可以尝试使用ls -h或直接使用ls,如果需要更详细的列表,可以使用dir命令,它通常等同于ls -l。- 连接超时:检查网络连接,确认远程主机地址和端口(默认是 22)是否正确。
希望这份详细的指南能帮助你熟练掌握 SFTP 下载命令!
