lftp是一个功能强大的命令行FTP客户端,支持多种协议,包括FTP、FTPS、HTTP、HTTPS、SFTP、FISH等。它提供了镜像同步、批量传输、队列管理、脚本自动化等高级功能,是Linux下最强大的文件传输工具之一。
FTP, FTPS, HTTP, HTTPS, SFTP, FISH, BitTorrent等
完整的目录镜像功能,支持增量同步
强大的传输队列,支持并行和优先级
完整的脚本语言,支持条件判断和循环
智能断点续传,支持大文件传输
多线程并行下载,大幅提升传输速度
sudo apt update
sudo apt install lftp
# 安装SSL支持
sudo apt install lftp-ssl
sudo yum install lftp
# 或使用epel源
sudo yum install epel-release
sudo yum install lftp
sudo dnf install lftp
brew install lftp
lftp [选项] [站点URL]
lftp -f 脚本文件
lftp -c "命令序列"
| 选项 | 描述 | 示例 |
|---|---|---|
-u 用户名,密码 |
指定登录用户名和密码 | -u admin,pass123 |
-p 端口 |
指定连接端口 | -p 2121 |
-e 命令 |
连接后执行的命令 | -e "ls" |
-f 脚本文件 |
从文件读取并执行命令 | -f script.lftp |
-c "命令" |
执行命令后退出 | -c "open ftp.example.com" |
--norc |
不读取配置文件 | --norc |
--version |
显示版本信息 | --version |
--help |
显示帮助信息 | --help |
# FTP连接
lftp ftp://ftp.example.com
lftp -u username,password ftp://ftp.example.com
# FTPS连接(加密FTP)
lftp ftps://ftp.example.com
# HTTP/HTTPS连接
lftp http://example.com/files/
lftp https://example.com/secure/
# SFTP连接(SSH文件传输)
lftp sftp://user@example.com
lftp sftp://user:pass@example.com:2222
# 本地文件系统
lftp file:///home/user/documents
# 连接后进入lftp交互模式
lftp> help # 显示帮助
lftp> ls # 列出远程文件
lftp> cd 目录 # 切换远程目录
lftp> lcd 目录 # 切换本地目录
lftp> pwd # 显示远程当前目录
lftp> lpwd # 显示本地当前目录
lftp> mkdir 目录名 # 创建远程目录
lftp> rmdir 目录名 # 删除远程目录
lftp> rm 文件 # 删除远程文件
lftp> mv 旧名 新名 # 重命名远程文件
lftp> chmod 权限 文件 # 修改远程文件权限
# 文件传输命令
lftp> get 远程文件 # 下载单个文件
lftp> mget *.txt # 下载多个文件
lftp> put 本地文件 # 上传单个文件
lftp> mput *.zip # 上传多个文件
lftp> pget -n 10 大文件 # 并行下载(10个连接)
lftp> mirror 远程目录 # 镜像下载整个目录
lftp> mirror -R 本地目录 # 镜像上传整个目录
# 队列管理
lftp> queue add 命令 # 添加命令到队列
lftp> queue start # 开始执行队列
lftp> queue stop # 停止队列执行
lftp> queue # 查看队列状态
# 书签管理
lftp> bookmark add 名称 # 添加书签
lftp> bookmark list # 列出书签
lftp> bookmark delete 名称 # 删除书签
# 退出
lftp> exit # 退出lftp
lftp> bye # 退出lftp
# 下载单个文件
lftp -e "get remote_file.txt; exit" ftp://example.com
# 下载多个文件(通配符)
lftp -e "mget *.pdf; exit" ftp://example.com/files/
# 上传单个文件
lftp -e "put local_file.zip; exit" ftp://user:pass@example.com
# 上传多个文件
lftp -e "mput /local/path/*.jpg; exit" ftp://example.com/uploads/
# 重命名下载
lftp -e "get remote.txt -o local.txt; exit" ftp://example.com
# 续传下载
lftp -e "get -c large_file.iso; exit" ftp://example.com
# 限制下载速度(KB/s)
lftp -e "set net:limit-rate 1024; get file.iso; exit" ftp://example.com
mirror命令是lftp最强大的功能之一,可以同步整个目录结构。
# 基本镜像下载(远程→本地)
lftp -e "mirror /remote/dir /local/dir; exit" ftp://example.com
# 镜像上传(本地→远程)
lftp -e "mirror -R /local/dir /remote/dir; exit" ftp://example.com
# 只同步新文件(增量同步)
lftp -e "mirror -c /remote /local; exit" ftp://example.com
# 删除本地多余文件(保持完全一致)
lftp -e "mirror --delete /remote /local; exit" ftp://example.com
# 并行镜像(加快速度)
lftp -e "mirror --parallel=10 /remote /local; exit" ftp://example.com
# 排除特定文件
lftp -e "mirror -x '*.tmp' -x 'temp/' /remote /local; exit" ftp://example.com
# 只同步特定文件类型
lftp -e "mirror -I '*.jpg' -I '*.png' /remote/images /local; exit" ftp://example.com
# 深度限制(只同步3层目录)
lftp -e "mirror --depth=3 /remote /local; exit" ftp://example.com
# 添加多个任务到队列
lftp -e "
open ftp://example.com
queue get file1.zip
queue get file2.iso
queue mirror /docs /local/docs
queue start
exit
"
# 设置队列并行数量
lftp -e "
set cmd:queue-parallel 3
queue add get large1.iso
queue add get large2.iso
queue add get large3.iso
queue start
exit
"
# 队列优先级
lftp -e "
queue add pget -n 5 important.iso
queue add pget -n 2 not_important.iso
queue start
exit
"
# 检查队列状态
lftp -e "
queue add get file1.zip
queue add get file2.zip
queue
jobs
exit
"
lftp支持完整的脚本语言,可以创建复杂的自动化任务。
# 脚本文件: backup.lftp
open ftp://backup:password@backup.example.com:21
cd /backup/$(hostname)/$(date +%Y%m%d)
# 上传数据库备份
put /backup/database.sql.gz
# 上传网站文件
mirror -R /var/www/html /website_backup
# 上传日志文件
mput /var/log/*.log
# 检查上传结果
ls -la
bye
# 条件判断脚本
open ftp://example.com
if ($(date +%H) -lt 12) then
cd /morning_uploads/
else
cd /afternoon_uploads/
endif
mput /data/*.csv
bye
# 循环处理文件
open ftp://example.com/uploads/
foreach file (*.jpg *.png)
echo "处理文件: $file"
get $file -o /local/images/$file
rm $file
end
bye
# ~/.lftprc 配置文件示例
# 网络设置
set net:timeout 60
set net:max-retries 5
set net:reconnect-interval-base 5
set net:limit-rate 0:0 # 不限速
# FTP设置
set ftp:ssl-allow yes
set ftp:ssl-protect-data yes
set ftp:ssl-protect-list yes
# SFTP设置
set sftp:connect-program "ssh -a -x -o ConnectTimeout=10"
set sftp:auto-confirm yes
# 镜像设置
set mirror:use-pget-n 5
set mirror:parallel-transfer-count 3
set mirror:parallel-directories yes
# 队列设置
set cmd:queue-parallel 2
set cmd:save-cwd-history yes
# 别名定义
alias lls !ls --color=auto
alias lless !less
alias lcd cd
# 书签定义
bookmark add myserver ftp://user:pass@example.com
bookmark add backup sftp://backup@backup.example.com:2222
# 自动登录脚本
auto myserver "cd /uploads; ls"
# 1. 并行下载大文件(10个连接)
lftp -e "pget -n 10 http://example.com/linux.iso; exit"
# 2. 定时自动同步(结合cron)
# crontab -e 添加:
0 2 * * * lftp -f /home/user/sync.lftp
# 3. 批量重命名下载
lftp -e "
open ftp://example.com/images/
glob -a get *.jpg -o renamed_#1#.jpg
exit
"
# 4. 通过代理连接
lftp -e "
set ftp:proxy http://proxy.example.com:8080
open ftp://target.example.com
ls
exit
"
# 5. 比较本地和远程目录差异
lftp -e "
open ftp://example.com
mirror -n /remote /local # 只显示差异,不传输
exit
"
# 6. 从HTTP服务器下载整个网站
lftp -e "
mirror --parallel=10 --use-pget-n=5 http://example.com/ /backup/website/
exit
"
# 7. 使用Tor匿名下载
lftp -e "
set ftp:proxy socks5://localhost:9050
open ftp://anonymous@ftp.example.com
get file.zip
exit
"
# 8. 加密配置文件中的密码
# 在~/.lftprc中使用:
set ftp:password "ENC:加密后的密码"
# 使用lftp --encrypt-password生成加密密码
#!/bin/bash
# website_backup.lftp
open sftp://backup@server.example.com:22
cd /backup/websites/$(date +%Y%m%d)
echo "开始备份网站文件..."
mirror -R /var/www/html /website_$(date +%Y%m%d)
echo "备份数据库..."
!mysqldump -u root -p密码 database > /tmp/db.sql
put /tmp/db.sql
echo "清理临时文件..."
!rm /tmp/db.sql
echo "备份完成!"
ls -lh
bye
#!/bin/bash
# batch_download.lftp
open ftp://user:pass@ftp.example.com
# 切换到下载目录
cd /downloads/software
# 创建本地目录
!mkdir -p /local/downloads
# 批量下载所有zip文件
queue add mget *.zip -O /local/downloads/
# 并行下载大文件
queue add pget -n 5 large_file.iso -o /local/downloads/
# 开始执行队列
queue start
# 等待队列完成
wait
echo "下载完成!"
ls /local/downloads/
bye
| 特性对比 | lftp | wget | curl |
|---|---|---|---|
| 协议支持 | FTP, FTPS, HTTP, HTTPS, SFTP, FISH, Torrent | HTTP, HTTPS, FTP | HTTP, HTTPS, FTP, SFTP, SCP等20+ |
| 交互模式 | 完整交互式shell | 无交互模式 | 无交互模式 |
| 镜像同步 | 强大mirror命令 | 基本递归下载 | 不支持 |
| 队列管理 | 完整队列系统 | 不支持 | 不支持 |
| 脚本语言 | 完整脚本支持 | 不支持 | 不支持 |
| 并行下载 | pget命令 | 不支持 | 不支持 |
| 适用场景 | 复杂FTP操作、镜像同步、自动化任务 | 简单文件下载、网页抓取 | API调用、简单文件传输 |
set net:timeout 60 和 set net:max-retries 3set ftp:ssl-allow no 或使用FTPS协议set ftp:charset UTF-8 和 set file:charset UTF-8set mirror:parallel-transfer-count 5set pget:default-n 3bookmark save~/.lftprc 保存常用设置-n 或 --dry-run 参数测试pget 并行下载加速mirror --delete 时要格外小心# ~/.lftprc 中的网络优化设置
set net:socket-bind-ipv4 yes
set net:socket-bind-ipv6 yes
set net:connection-limit 20
set net:idle 60
set dns:cache-enable yes
set dns:max-cache-ttl 3600
# 传输性能优化设置
set ftp:use-mdtm yes
set ftp:use-size yes
set ftp:use-stat-for-list yes
set xfer:use-temp-file yes
set xfer:temp-file-name *.lftp
set mirror:parallel-transfer-count 5
set mirror:use-pget-n 10