- 从远程服务器下载 文件到本地计算机。
- 从本地计算机上传 文件到另一个远程服务器。
因为FTP协议本身不支持在两个远程服务器之间直接中转复制文件,所以必须通过本地计算机作为“中转站”。

下面我将详细分解这个过程,并提供具体的命令和示例。
第一步:连接到FTP服务器
在使用任何文件操作命令之前,你首先需要连接到FTP服务器,在命令行(如Windows的CMD或PowerShell,或Linux/macOS的Terminal)中输入:
ftp [服务器地址或IP]
ftp ftp.example.com
连接后,系统会提示你输入用户名和密码进行登录。
第二步:核心复制命令(下载 + 上传)
假设我们要将文件从 服务器A 复制到 服务器B。

场景设定:
- 源服务器A:
ftp.source.com, 用户名user1, 密码pass1 - 目标服务器B:
ftp.target.com, 用户名user2, 密码pass2 - 要复制的文件:
data.zip - 本地临时存储位置:
C:\temp\(Windows) 或/home/user/temp/(Linux/macOS)
详细步骤与命令
连接到源服务器A并下载文件
连接到源服务器,将 data.zip 下载到你的本地临时文件夹。
# 1. 连接到源服务器A ftp ftp.source.com # 2. 输入用户名 user1 和密码 pass1 进行登录 # 3. (可选)切换到源文件所在的远程目录 # 文件在 /home/user1/files/ 目录下 cd /home/user1/files # 4. (可选)设置本地计算机的下载目录 # lcd 命令用于 "Local Change Directory" lcd C:\temp # Windows # lcd /home/user/temp # Linux/macOS # 5. 下载文件 get data.zip # 6. 下载完成后,退出FTP连接 bye
命令解释:
cd [remote_directory]: Change Directory,切换远程服务器上的当前目录。lcd [local_directory]: Local Change Directory,切换你本地计算机上的当前目录。get [remote_file]: 从远程服务器下载一个文件到本地,如果需要重命名,可以使用get remote_file local_file。bye或quit: 退出FTP会话。
连接到目标服务器B并上传文件
data.zip 已经在你的本地计算机上,连接到目标服务器B,将这个文件上传过去。
# 1. 连接到目标服务器B ftp ftp.target.com # 2. 输入用户名 user2 和密码 pass2 进行登录 # 3. (可选)切换到目标上传目录 # 要上传到 /home/user2/incoming/ 目录下 cd /home/user2/incoming # 4. (可选)再次确认本地文件路径 lcd C:\temp # Windows # lcd /home/user/temp # Linux/macOS # 5. 上传文件 put data.zip # 6. 上传完成后,退出FTP连接 bye
命令解释:

put [local_file]: 从本地计算机上传一个文件到远程服务器,如果需要重命名,可以使用put local_file remote_file。mput [local_pattern]: Multiple Put,上传多个符合本地模式的文件(mput *.txt)。mget [remote_pattern]: Multiple Get,下载多个符合远程模式的文件。
自动化脚本(批处理)
如果你需要频繁执行这个操作,可以编写一个批处理脚本(Windows)或Shell脚本(Linux/macOS)来自动化整个过程。
Windows 批处理脚本示例 (copy_ftp.bat)
@echo off
setlocal
REM --- 配置参数 ---
set "SOURCE_SERVER=ftp.source.com"
set "SOURCE_USER=user1"
set "SOURCE_PASS=pass1"
set "SOURCE_FILE=data.zip"
set "SOURCE_REMOTE_DIR=/home/user1/files"
set "TARGET_SERVER=ftp.target.com"
set "TARGET_USER=user2"
set "TARGET_PASS=pass2"
set "TARGET_REMOTE_DIR=/home/user2/incoming"
set "LOCAL_TEMP_DIR=C:\temp"
REM --- 创建本地临时目录(如果不存在) ---
if not exist "%LOCAL_TEMP_DIR%" mkdir "%LOCAL_TEMP_DIR%"
REM --- 步骤1: 从源服务器下载文件 ---
echo 正在从 %SOURCE_SERVER% 下载 %SOURCE_FILE%...
echo open %SOURCE_SERVER% > ftp_script.txt
echo %SOURCE_USER% >> ftp_script.txt
echo %SOURCE_PASS% >> ftp_script.txt
echo cd %SOURCE_REMOTE_DIR% >> ftp_script.txt
echo lcd %LOCAL_TEMP_DIR% >> ftp_script.txt
echo get %SOURCE_FILE% >> ftp_script.txt
echo bye >> ftp_script.txt
ftp -s:ftp_script.txt
del ftp_script.txt
if not exist "%LOCAL_TEMP_DIR%\%SOURCE_FILE%" (
echo 错误: 下载失败!文件未找到。
pause
exit /b 1
)
REM --- 步骤2: 上传文件到目标服务器 ---
echo 正在上传 %SOURCE_FILE% 到 %TARGET_SERVER%...
echo open %TARGET_SERVER% > ftp_script.txt
echo %TARGET_USER% >> ftp_script.txt
echo %TARGET_PASS% >> ftp_script.txt
echo cd %TARGET_REMOTE_DIR% >> ftp_script.txt
echo lcd %LOCAL_TEMP_DIR% >> ftp_script.txt
echo put %SOURCE_FILE% >> ftp_script.txt
echo bye >> ftp_script.txt
ftp -s:ftp_script.txt
del ftp_script.txt
echo 文件复制完成!
pause
endlocal
Linux/macOS Shell 脚本示例 (copy_ftp.sh)
#!/bin/bash
# --- 配置参数 ---
SOURCE_SERVER="ftp.source.com"
SOURCE_USER="user1"
SOURCE_PASS="pass1"
SOURCE_FILE="data.zip"
SOURCE_REMOTE_DIR="/home/user1/files"
TARGET_SERVER="ftp.target.com"
TARGET_USER="user2"
TARGET_PASS="pass2"
TARGET_REMOTE_DIR="/home/user2/incoming"
LOCAL_TEMP_DIR="/tmp/ftp_copy"
# --- 创建本地临时目录 ---
mkdir -p "$LOCAL_TEMP_DIR"
# --- 步骤1: 从源服务器下载文件 ---
echo "正在从 $SOURCE_SERVER 下载 $SOURCE_FILE..."
ftp -n $SOURCE_SERVER <<EOF
user $SOURCE_USER $SOURCE_PASS
cd $SOURCE_REMOTE_DIR
lcd $LOCAL_TEMP_DIR
get $SOURCE_FILE
bye
EOF
if [ ! -f "$LOCAL_TEMP_DIR/$SOURCE_FILE" ]; then
echo "错误: 下载失败!文件未找到。"
exit 1
fi
# --- 步骤2: 上传文件到目标服务器 ---
echo "正在上传 $SOURCE_FILE 到 $TARGET_SERVER..."
ftp -n $TARGET_SERVER <<EOF
user $TARGET_USER $TARGET_PASS
cd $TARGET_REMOTE_DIR
lcd $LOCAL_TEMP_DIR
put $SOURCE_FILE
bye
EOF
echo "文件复制完成!"
# --- (可选)清理临时文件 ---
# rm -f "$LOCAL_TEMP_DIR/$SOURCE_FILE"
如何使用Shell脚本:
- 将代码保存为
copy_ftp.sh。 - 赋予执行权限:
chmod +x copy_ftp.sh。 - 运行脚本:
./copy_ftp.sh。
重要提示和替代方案
- 安全性:FTP协议在传输用户名和密码时是明文的,非常不安全,建议使用更安全的协议,如 SFTP (基于SSH) 或 FTPS (基于SSL/TLS)。
- SFTP/SCP:如果你有SSH访问权限,使用SFTP或SCP会更简单、更安全,它们可以直接在两个服务器之间传输文件,无需本地中转。
- SFTP示例 (从服务器A复制到服务器B):
# 在你的本地计算机上执行 # 这条命令会登录到server_b,然后通过它从server_a拉取文件 sftp user2@server_b # 在sftp提示符下执行 get -r sftp://user1:pass1@server_a/path/to/data.zip /path/to/save/on/b/
- SCP示例:
# 在你的本地计算机上执行,通过本地中转 scp user1@server_a:/path/to/data.zip . # 下载到本地 scp data.zip user2@server_b:/path/to/save/on/b/ # 上传到server_b
- SFTP示例 (从服务器A复制到服务器B):
- 专用工具:对于复杂的同步任务,可以使用
rsync等工具,它们更高效,支持增量同步和更多选项。
| 命令 | 全称 | 描述 |
|---|---|---|
open |
Open | 连接到指定的FTP服务器。 |
user |
User | 登录时输入用户名。 |
pass / password |
Password | 登录时输入密码。 |
cd |
Change Directory | 远程:切换服务器上的目录。 |
lcd |
Local Change Directory | 本地:切换你电脑上的目录。 |
ls / dir |
List Directory | 远程:列出服务器当前目录下的文件。 |
!ls |
List Directory | 本地:列出你电脑当前目录下的文件。 |
get / mget |
Get / Multiple Get | 下载:从服务器获取一个或多个文件到本地。 |
put / mput |
Put / Multiple Put | 上传:从本地发送一个或多个文件到服务器。 |
delete |
Delete | 远程:删除服务器上的文件。 |
!del |
Delete | 本地:删除你电脑上的文件。 |
bye / quit |
Bye / Quit | 关闭FTP连接并退出程序。 |
