要通过FTP命令上传文件夹,需理解FTP的基本操作逻辑,并通过命令行工具逐步实现目录创建与文件递归传输,以下是详细步骤及注意事项,涵盖连接服务器、目录操作、文件上传等核心环节,同时提供辅助脚本方法提升效率。

FTP上传文件夹的前置准备
在开始操作前,需确认以下信息:
- FTP服务器地址:如
ftp.example.com(含端口,默认21); - 登录凭据:用户名(
username)及密码(password); - 本地文件夹路径:待上传的文件夹在本地电脑中的完整路径(如
C:localfolder或/home/user/local_folder); - 远程目标路径:服务器上存放文件夹的目录(如
/remote/folder或public_html)。
通过命令行FTP上传文件夹的详细步骤
建立FTP连接
打开命令行工具(Windows的cmd或PowerShell,Linux/macOS的Terminal),输入以下命令连接服务器:
ftp ftp.example.com
若需指定端口(如2121),则添加-p参数:
ftp -p ftp.example.com
连接后,根据提示输入用户名和密码,登录成功会显示230 User logged in.。
切换本地与远程目录
-
切换本地目录:使用
lcd(local change directory)命令进入本地待上传文件夹的上级目录(确保后续操作基于该文件夹):lcd C:localfolder # Windows示例 lcd /home/user/local_folder # Linux/macOS示例
执行后可通过
!dir(Windows)或!ls(Linux/macOS)查看本地目录内容确认。 -
切换远程目录:使用
cd(change directory)命令进入服务器上的目标存放目录:
cd /remote/folder # 远程目标路径
通过
ls命令查看远程目录内容,确认当前路径正确。
创建远程目录结构
FTP的put/mput命令仅支持上传文件,无法直接创建文件夹,若本地文件夹包含子目录,需先在远程服务器创建对应的目录结构。
- 手动创建目录:假设本地有
folder/subfolder1/subfolder2结构,需逐级创建:mkdir folder # 创建一级目录 cd folder mkdir subfolder1 # 创建二级目录 cd subfolder1 mkdir subfolder2 # 创建三级目录 cd .. # 返回上级目录(可根据需要多次执行)
- 批量创建目录(可选):若目录层级较深,可通过
ftp的-i(交互模式关闭)配合脚本实现,但需结合服务器支持情况。
设置传输模式并上传文件
-
选择传输模式:根据文件类型选择模式,避免内容损坏:
- 二进制模式(推荐):适用于图片、视频、压缩包、程序等非文本文件,确保文件原始字节完整传输:
binary
- ASCII模式:仅适用于文本文件(如
.txt、.html),会自动转换换行符(Windows的rn转Linux的n),但可能导致二进制文件异常。
- 二进制模式(推荐):适用于图片、视频、压缩包、程序等非文本文件,确保文件原始字节完整传输:
-
上传文件夹内容:
-
上传当前目录所有文件:使用
mput(multiple put)命令,配合通配符匹配所有文件:mput * # 上传本地当前目录所有文件
若需跳过确认提示(避免逐个输入
y),可在执行ftp命令时加-i参数(如ftp -i ftp.example.com),或在进入交互模式后执行prompt off关闭交互确认。 -
处理子文件夹上传:若本地文件夹包含子目录,需逐层进入子目录并重复创建目录、上传操作:

cd subfolder1 # 进入本地子目录(需先通过lcd切换到本地子目录) lcd subfolder1 # 切换本地到对应子目录 mkdir subfolder1 # 在远程创建同名子目录(若已存在则跳过) cd subfolder1 # 进入远程子目录 mput * # 上传子目录内所有文件 cd .. # 返回远程父目录 lcd .. # 返回本地父目录
-
完成上传并断开连接
上传完成后,通过以下命令关闭连接:
close # 关闭当前FTP连接(不退出FTP程序) quit # 退出FTP程序,返回命令行
辅助脚本:自动化递归上传文件夹
手动上传多层嵌套文件夹效率较低,可通过批处理脚本(Windows)或Shell脚本(Linux/macOS)实现自动化,以下以Windows批处理为例:
@echo off
setlocal enabledelayedexpansion
:: FTP配置
set ftp_server=ftp.example.com
set ftp_user=username
set ftp_pass=password
set local_folder=C:localfolder
set remote_folder=/remote/folder
:: 创建临时FTP脚本文件
echo open %ftp_server% > ftp_script.txt
echo %ftp_user% >> ftp_script.txt
echo %ftp_pass% >> ftp_script.txt
echo binary >> ftp_script.txt
echo lcd %local_folder% >> ftp_script.txt
echo cd %remote_folder% >> ftp_script.txt
:: 遍历本地文件夹,生成目录创建和文件上传命令
for /r "%local_folder%" %%f in (*) do (
set relative_path=%%~pf
set relative_path=!relative_path:%local_folder%=!
set relative_path=!relative_path:~1!
:: 处理目录结构
if not "!relative_path!"=="" (
for /f "tokens=*" %%d in ("!relative_path!") do (
set dir_part=%%~dpd
set dir_part=!dir_part:~0,-1!
if not "!dir_part!"=="" (
echo mkdir "!dir_part!" >> ftp_script.txt
echo cd "!dir_part!" >> ftp_script.txt
)
)
)
:: 上传文件
set file_name=%%~nxf
echo put "%%f" >> ftp_script.txt
if not "!relative_path!"=="" (
echo cd .. >> ftp_script.txt
)
)
echo bye >> ftp_script.txt
:: 执行FTP脚本
ftp -s:ftp_script.txt
:: 清理临时文件
del ftp_script.txt
endlocal
脚本说明:
- 自动遍历本地文件夹及子文件夹,生成对应的远程目录创建命令;
- 逐层上传文件,并在完成后返回上级目录;
- 通过
ftp -s:ftp_script.txt执行脚本,避免手动输入命令。
注意事项
- 权限问题:确保FTP用户对远程目标目录有写入权限,否则会提示
550 Permission denied。 - 网络稳定性:大文件或弱网络环境下,上传可能中断,建议使用支持断点续传的FTP工具(如
lftp)。 - 文件名编码:若文件名含中文或特殊符号,需确认服务器与本地系统编码一致(如UTF-8),避免乱码。
- 安全风险:FTP传输未加密,密码可能被窃取,敏感场景建议使用SFTP(基于SSH的加密文件传输)。
常用FTP命令速查表
| 命令 | 功能说明 | 示例 |
|---|---|---|
open |
连接FTP服务器 | open ftp.example.com |
user |
登录服务器(用户名) | user username |
pass |
输入密码 | pass password |
lcd |
切换本地目录 | lcd C:local |
cd |
切换远程目录 | cd /remote |
mkdir |
创建远程目录 | mkdir new_folder |
ls |
列出远程目录内容 | ls |
binary |
设置二进制传输模式 | binary |
mput |
上传多个文件 | mput *.txt |
close |
关闭当前连接 | close |
quit |
退出FTP程序 | quit |
相关问答FAQs
问题1:使用FTP命令上传文件夹时,提示“550 Create directory operation failed”,是什么原因?如何解决?
解答:该错误通常由以下原因导致:①FTP用户对远程目录无写入权限;②远程目录下已存在同名文件;③服务器磁盘空间不足,解决方法:①联系管理员确认用户权限;②通过del或rename命令删除或重命名同名文件;③使用dir命令检查远程目录磁盘剩余空间。
问题2:为什么用FTP上传文件夹后,图片或压缩包文件损坏,无法正常打开?
解答:这是因为传输模式设置错误,FTP默认使用ASCII模式传输文本文件,会自动修改文件中的换行符(如Windows的rn转为Unix的n),导致二进制文件(图片、视频、压缩包等)内容损坏,解决方法:在上传前执行binary命令切换到二进制传输模式,确保文件以原始字节形式传输,避免内容被篡改。
原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/14953.html