通过编写脚本循环执行put命令或利用工具自带的批量处理功能,实现文件上传任务的自动化,高效完成重复操作。
put
命令本身(常见于FTP、SFTP、SCP等协议的命令行客户端)通常设计为一次传输一个文件,直接使用put file1 file2 file3
这样的语法在大多数标准客户端中是无效的,但这并不意味着批量传输无法实现!以下是几种高效、可靠且常用的方法来实现“批量put
”的效果:
*使用通配符 (`或
?`) – 最常用且简单 (适用于模式匹配)**
这是最直观的方法,尤其当你要传输一批具有相同命名模式(如相同扩展名、前缀)的文件时。
- 连接服务器: 首先使用你的客户端(如
ftp
,sftp
,psftp
(PuTTY SFTP),scp
等)连接到目标服务器。 - 定位目录:
- 使用
lcd
命令(在FTP/SFTP中通常是lcd
,表示local change directory)切换到本地包含待传输文件的目录。 - 使用
cd
命令切换到服务器上希望存放文件的目标目录。
- 使用
- 使用
put
命令 + 通配符:- 传输所有文件:
put *
- 这将上传当前本地目录下的所有文件(不包括隐藏文件和子目录)到服务器的当前目录。
- 传输特定扩展名的文件:
put *.jpg
- 这将上传所有
.jpg
文件。
- 这将上传所有
- 传输特定前缀的文件:
put report_*.pdf
- 这将上传所有以
report_
开头且以.pdf
结尾的文件。
- 这将上传所有以
- 传输特定字符的文件:
put image?.png
- 这将上传类似
image1.png
,imageA.png
的文件(匹配单个任意字符)。
- 这将上传类似
- 传输所有文件:
重要提示:
- 客户端支持: 绝大多数现代命令行FTP/SFTP客户端(包括Windows自带的
ftp
、OpenSSH的sftp
、PuTTY的psftp
)都支持在put
命令中使用通配符进行批量传输。 - 目录处理: 标准的
put *
通常不会递归上传子目录,它只上传当前目录下的文件。 - 精确匹配: 确保你的通配符模式能精确匹配到你想要的文件,避免误传。
使用mput
命令 (FTP协议常用)
mput
(multiple put) 是FTP协议中专门为批量上传设计的命令,它的用法与put
+ 通配符非常相似:
- 连接FTP服务器 (
ftp your.server.com
)。 - 使用
lcd
定位本地目录。 - 使用
cd
定位服务器目录。 - 执行
mput
:mput *
(上传所有文件)mput *.txt
(上传所有txt文件)mput data_*
(上传所有以data_
开头的文件)
- 交互提示: 执行
mput
时,FTP客户端通常会为每个匹配的文件询问mput filename?
,你需要输入y
或yes
来确认上传每个文件,这可以防止误操作,但对于大量文件很繁琐。 - 关闭提示 (推荐): 在执行
mput
之前,使用prompt
命令关闭交互提示:- 输入
prompt
,这会切换提示状态(开->关 或 关->开),通常执行一次prompt
即可关闭提示。 - 然后执行
mput your_pattern
(如mput *.zip
),文件将自动批量上传,不再逐个询问。
- 输入
注意: mput
主要是FTP协议的命令,在SFTP协议中(如OpenSSH的sftp
或PuTTY的psftp
),通常没有mput
命令,但put
命令本身支持通配符(如方法一所述),效果等同于关闭了提示的mput
。
编写脚本/批处理文件 (最灵活强大,适合复杂任务)
当需要更精细的控制(如包含子目录、过滤特定文件、处理大量文件、与其他命令结合)时,编写脚本是最佳选择。
-
Linux/Unix Shell (Bash等) +
sftp
/scp
:- 使用
scp
递归复制整个目录(最常用):scp -r /path/to/local/directory username@yourserver.com:/path/to/remote/directory
-r
表示递归复制目录及其所有内容。 - 使用
sftp
在脚本中执行命令:#!/bin/bash sftp username@yourserver.com << EOF lcd /path/to/local/dir cd /path/to/remote/dir put file1.txt put file2.log put /another/local/path/file3.jpg put *.pdf bye EOF
将需要执行的命令(
lcd
,cd
,put
)放在<< EOF
和EOF
之间,可以混合使用单个文件名和通配符。注意: 标准sftp
的put
命令本身不支持递归上传目录,但可以结合find
或tar
实现。
- 使用
-
Windows 批处理 (.bat) +
psftp
(PuTTY SFTP):- 创建一个文本文件,例如
upload.bat
如下:@echo off "C:\Path\To\psftp.exe" username@yourserver.com -b upload_commands.txt -pw yourpassword
强烈警告:-pw yourpassword 会将密码明文存储在脚本中,极不安全!仅用于测试或绝对安全的环境。 推荐使用公钥认证。
- 创建另一个文件
upload_commands.txt
,包含要执行的命令:lcd "C:\Local\Path" cd "/remote/path" put file1.doc put data_*.csv put "file with spaces.txt" exit
- 运行
upload.bat
即可执行批量上传。
- 创建一个文本文件,例如
-
Windows 批处理 (.bat) +
ftp
(自带):@echo off echo open yourserver.com > ftpcmd.dat echo username >> ftpcmd.dat echo yourpassword >> ftpcmd.dat # 同样,明文密码不安全! echo lcd "C:\Local\Path" >> ftpcmd.dat echo cd /remote/path >> ftpcmd.dat echo prompt n >> ftpcmd.dat # 关闭mput的交互提示 echo mput *.jpg >> ftpcmd.dat echo mput report_*.pdf >> ftpcmd.dat echo bye >> ftpcmd.dat ftp -s:ftpcmd.dat del ftpcmd.dat
同样存在密码明文存储的安全风险。
使用图形化工具 (用户友好,无需命令行)
对于不熟悉命令行的用户,许多优秀的图形化FTP/SFTP客户端内置了强大的批量上传功能:
- FileZilla (免费, 开源): 支持FTP, FTPS, SFTP,在本地文件浏览器中选中多个文件或文件夹(支持Ctrl+Click, Shift+Click),右键单击选择“上传”,它会自动处理所有选中的项目,包括子目录。
- WinSCP (免费, Windows): 专为SCP和SFTP设计,界面类似文件管理器,同样支持多选文件/文件夹后拖拽到远程窗口或使用上传按钮,功能非常强大,支持同步、脚本等。
- Cyberduck (免费/付费, macOS/Windows): 支持多种协议,操作直观。
- Transmit (付费, macOS): 功能强大的老牌FTP/SFTP客户端。
这些工具通常提供:
- 直观的多选和拖放上传。
- 队列管理,可以看到上传进度和状态。
- 断点续传支持。
- 文件夹同步功能(更高级的批量处理)。
- 更安全的密码管理(如集成系统钥匙串)。
选择哪种方法?
- 简单模式匹配: 方法一 (
put
+ 通配符) 或 方法二 (mput
) 最快。 - 包含子目录 / 复杂逻辑: 方法三 (脚本) 或 方法四 (图形工具) 是必须的。
scp -r
是最简单的递归上传方式。 - 用户友好 / 避免命令行: 方法四 (图形工具) 是首选。
- 自动化 / 定时任务: 方法三 (脚本) 是唯一选择。
安全提示 (E-A-T 关键点):
- 避免明文密码: 绝对不要在脚本或批处理文件中硬编码密码(如
-pw password
或echo yourpassword
)。 这是严重的安全风险。- 推荐使用公钥认证 (SSH Key): 这是SFTP/SCP最安全、最推荐的身份验证方式,配置好后,无需输入密码即可连接。
- 使用密码管理器/密钥环: 图形化工具通常能安全地存储密码在系统钥匙串中。
- 交互式输入: 如果必须用密码,让脚本运行时提示用户输入(但无法用于完全自动化)。
- 使用安全协议: 优先使用 SFTP (SSH File Transfer Protocol) 或 FTPS (FTP over SSL/TLS),它们对传输的数据进行加密,避免使用纯文本传输密码和数据的普通FTP。
- 最小权限原则: 用于上传文件的服务器账户应仅拥有完成工作所需的最小权限(只能写入特定目录)。
虽然put
命令本身通常不能直接接受多个文件名参数,但通过*通配符 (`?)**、**专门的批量命令 (
mput`)编写自动化脚本 或 使用图形化FTP/SFTP客户端,都可以高效、可靠地实现文件的批量上传,选择最适合你具体需求、技术熟练度和安全要求的方法。始终将安全性放在首位,优先使用SFTP/FTPS和公钥认证。**
引用说明:
- 本文中关于命令行工具 (
ftp
,sftp
,scp
,psftp
) 的语法和行为描述基于广泛使用的标准实现(如 OpenSSH, PuTTY, Windows 内置 FTP 客户端)的通用特性和文档。 - 图形化工具 (FileZilla, WinSCP, Cyberduck, Transmit) 的功能描述基于其官方公开文档和用户界面的普遍特性。
- 安全建议(避免明文密码、推荐公钥认证、使用SFTP/FTPS)基于互联网安全最佳实践,参考来源包括:
- OpenSSH 官方文档安全章节
- NIST (National Institute of Standards and Technology) 关于安全文件传输的建议
- OWASP (Open Web Application Security Project) 关于凭证安全的最佳实践
- 术语定义 (如 SFTP, FTPS, 公钥认证) 参考了相关的 IETF (Internet Engineering Task Force) RFC 文档(如 RFC 4251, RFC 4252, RFC 4253 SSH;RFC 4217 FTPS)。
原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/7556.html