本文目录导读:

可以使用多种脚本方式批量上传文件到FTP,下面提供几种常用方法(Windows和Linux环境均包含)。
Windows 批处理 + FTP 命令(原生方式)
准备 upload.txt(FTP 命令文件)
open ftp.example.com
username
password
binary
cd /remote/path
lcd C:\local\path
mput *.txt
quit
批处理脚本 ftp_upload.bat
@echo off ftp -s:upload.txt pause
说明:
mput *.txt上传所有.txt文件;mput *.*上传所有文件。
PowerShell 脚本(功能更强大)
# 配置参数
$ftpServer = "ftp.example.com"
$username = "user"
$password = "pass"
$localPath = "C:\Local\Folder\*"
$remotePath = "/remote/folder"
# 获取文件列表
$files = Get-ChildItem -Path $localPath
foreach ($file in $files) {
$webclient = New-Object System.Net.WebClient
$webclient.Credentials = New-Object System.Net.NetworkCredential($username, $password)
$uri = New-Object System.Uri("ftp://$ftpServer$remotePath/$($file.Name)")
$webclient.UploadFile($uri, $file.FullName)
Write-Host "Uploaded: $($file.Name)"
}
递归上传子文件夹(进阶版):
$ftp = "ftp://ftp.example.com/remote/folder"
$user = "user"
$pass = "pass"
$local = "C:\Local\Folder"
$webclient = New-Object System.Net.WebClient
$webclient.Credentials = New-Object System.Net.NetworkCredential($user, $pass)
Get-ChildItem -Path $local -Recurse -File | ForEach-Object {
$relativePath = $_.FullName.Substring($local.Length + 1)
$remoteUri = "$ftp/$($relativePath -replace '\\','/')"
$webclient.UploadFile($remoteUri, $_.FullName)
Write-Host "Uploaded: $relativePath"
}
Linux Shell 脚本(使用 ftp 或 curl)
方法 A:使用系统 ftp 命令
创建 upload.sh:
#!/bin/bash
FTP_SERVER="ftp.example.com"
USER="user"
PASS="pass"
LOCAL_DIR="/local/path/"
REMOTE_DIR="/remote/path"
# 生成临时命令文件
echo "open $FTP_SERVER" > ftp_cmds.txt
echo "user $USER $PASS" >> ftp_cmds.txt
echo "binary" >> ftp_cmds.txt
echo "cd $REMOTE_DIR" >> ftp_cmds.txt
echo "lcd $LOCAL_DIR" >> ftp_cmds.txt
# 添加所有文件(mput 只上传当前目录下的文件,不含子目录)
for file in "$LOCAL_DIR"*.ext; do
echo "put $(basename $file)" >> ftp_cmds.txt
done
echo "quit" >> ftp_cmds.txt
# 执行
ftp -n < ftp_cmds.txt
方法 B:使用 curl(推荐,支持更多协议)
#!/bin/bash
FTP_SERVER="ftp://ftp.example.com/remote/folder"
USER="user:PASS"
for file in /local/path/*.txt; do
curl -T "$file" -u "$USER" "$FTP_SERVER/"
echo "Uploaded: $file"
done
递归上传文件夹:
#!/bin/bash
FTP_SERVER="ftp://ftp.example.com/remote/folder"
USER="user:pass"
LOCAL_DIR="/local/path"
# 使用 find 递归查找所有文件
find "$LOCAL_DIR" -type f | while read file; do
# 计算相对路径
relpath="${file#$LOCAL_DIR/}"
# 上传到对应远程路径
curl -T "$file" -u "$USER" "$FTP_SERVER/$relpath"
echo "Uploaded: $relpath"
done
Python 脚本(最灵活,跨平台)
import ftplib
import os
def upload_files(ftp_host, username, password, remote_base, local_dir):
ftp = ftplib.FTP(ftp_host)
ftp.login(username, password)
for root, dirs, files in os.walk(local_dir):
for file in files:
local_path = os.path.join(root, file)
# 计算远程路径
rel_path = os.path.relpath(local_path, local_dir)
remote_path = f"{remote_base}/{rel_path.replace(os.sep, '/')}"
# 确保远程目录存在
remote_dir = os.path.dirname(remote_path)
try:
ftp.cwd(remote_dir)
except ftplib.error_perm:
# 创建不存在的远程目录
parts = remote_dir.split('/')
current = ''
for part in parts:
if part:
current += '/' + part
try:
ftp.cwd(current)
except ftplib.error_perm:
ftp.mkd(current)
# 上传文件
with open(local_path, 'rb') as f:
ftp.storbinary(f'STOR {remote_path}', f)
print(f"Uploaded: {remote_path}")
ftp.quit()
# 使用示例
upload_files(
'ftp.example.com',
'username',
'password',
'/remote/folder',
'/local/folder'
)
注意事项
- 被动模式:如果遇到连接问题,FTP 命令加
passive或代码中设置被动模式 - 二进制模式:上传非文本文件(图片、zip等)必须使用
binary模式 - 权限:确保 FTP 账号有目录写入权限
- 网络稳定:大批量文件建议增加重试机制
- 安全:避免在脚本中硬编码密码,可使用环境变量或配置文件
选择哪种方法取决于你的操作系统和需求:
- Windows 原生:用批处理
- Linux 简单使用:用
curl - 跨平台/复杂需求:用 Python
如果需要针对特定场景(如断点续传、加密传输)的解决方案,请补充说明。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播