菜鸟科技网

FTP复制文件命令有哪些?

  1. 从远程服务器下载 文件到本地计算机。
  2. 从本地计算机上传 文件到另一个远程服务器。

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

FTP复制文件命令有哪些?-图1
(图片来源网络,侵删)

下面我将详细分解这个过程,并提供具体的命令和示例。


第一步:连接到FTP服务器

在使用任何文件操作命令之前,你首先需要连接到FTP服务器,在命令行(如Windows的CMD或PowerShell,或Linux/macOS的Terminal)中输入:

ftp [服务器地址或IP]
ftp ftp.example.com

连接后,系统会提示你输入用户名和密码进行登录。


第二步:核心复制命令(下载 + 上传)

假设我们要将文件从 服务器A 复制到 服务器B

FTP复制文件命令有哪些?-图2
(图片来源网络,侵删)

场景设定:

  • 源服务器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
  • byequit: 退出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

命令解释:

FTP复制文件命令有哪些?-图3
(图片来源网络,侵删)
  • 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脚本:

  1. 将代码保存为 copy_ftp.sh
  2. 赋予执行权限:chmod +x copy_ftp.sh
  3. 运行脚本:./copy_ftp.sh

重要提示和替代方案

  1. 安全性:FTP协议在传输用户名和密码时是明文的,非常不安全,建议使用更安全的协议,如 SFTP (基于SSH) 或 FTPS (基于SSL/TLS)。
  2. 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
  3. 专用工具:对于复杂的同步任务,可以使用 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连接并退出程序。
分享:
扫描分享到社交APP
上一篇
下一篇