【Linux】lftp工具详细使用说明

1. 安装与配置

安装

  • Linux:

    • Debian/Ubuntu:
      sudo apt update && sudo apt install lftp
    • CentOS/RHEL:
      sudo yum install lftp
    • Arch/Manjaro:
      sudo pacman -S lftp
  • macOS:

    brew install lftp
  • Windows:

    • 通过 Cygwin 安装,勾选 lftp 包。
    • 或使用 WSL(推荐):
      sudo apt install lftp  # 在 WSL 的 Ubuntu 环境中运行

2. 文件与目录操作

上传文件

  • 单个文件上传:

    put local_file.txt
    # 指定远程路径:
    put local_file.txt -o /remote/path/remote_file.txt
  • 批量上传文件:

    mput *.txt                 # 上传所有 .txt 文件
    mput -O /remote/path/ *.txt  # 上传到指定目录

上传文件夹

  • 递归上传整个目录​(保留权限和时间戳):
    mirror -R /local/dir /remote/dir
    • 排除文件:
      mirror -R --exclude *.tmp /local/dir /remote/dir
    • 覆盖已有文件:
      mirror -R --overwrite /local/dir /remote/dir

修改与删除

  • 重命名文件/目录:
    mv old_name.txt new_name.txt
  • 删除文件:
    rm file.txt
  • 递归删除目录:
    rm -r directory/
  • 修改文件权限​(仅限 SFTP/Shell):
    chmod 755 file.txt

3. mirror命令使用详解

在 lftp 中使用 mirror 命令下载目录时,​默认会自动跳过已存在且文件大小、时间戳一致的文件。但若需显式控制跳过已下载文件,可通过以下方法实现:


1. 默认行为(无需额外参数)​

mirror /remote/dir /local/dir
  • 自动跳过条件
    • 目标路径已存在同名文件。
    • 文件大小和修改时间戳(若协议支持)与远程文件一致。
  • 这是最轻量的方式,适合大部分场景。

2. 显式跳过已存在文件

方法 1:使用 --only-newer 参数

仅下载比本地文件更新的远程文件(根据时间戳判断):

mirror --only-newer /remote/dir /local/dir
  • 适用场景:远程文件可能被覆盖更新,需增量同步最新版本。
  • 注意:若本地文件时间戳被意外修改,可能导致跳过有效文件。
方法 2:使用 --ignore-time 参数

仅根据文件大小差异判断是否跳过(忽略时间戳):

mirror --ignore-time /remote/dir /local/dir
  • 适用场景:时间戳不可靠(如某些FTP服务器配置异常),需依赖文件大小校验。
  • 缺点:无法检测内容相同但大小一致的文件差异(极少数情况)。

3. 强制不覆盖已存在文件

若需绝对避免覆盖本地文件​(即使远程文件更新):

mirror --no-overwrite /remote/dir /local/dir
  • 效果:完全跳过本地已存在的文件(无论远程是否更新)。
  • 适用场景:本地文件为只读备份,禁止任何覆盖操作。

4. 排除已下载文件的干扰

若本地文件因传输中断导致不完整,可结合 --use-pget 实现断点续传:

mirror --use-pget=3 /remote/dir /local/dir
  • 原理:分段下载时记录进度,自动跳过已下载的片段。
  • 提示:通过 set cmd:interactive 可显示分段进度。

5. 示例命令

基本跳过已下载文件
lftp -c "open -u user,pass ftp://example.com; mirror --only-newer /remote/data /local/backup"
仅补全缺失文件(不检查更新)​
mirror --no-recursion --no-overwrite /remote/dir /local/dir

注意事项

  1. 时间戳同步

    • 使用 -k 或 --keep-time 保留远程文件时间戳,确保校验准确:
      mirror -k /remote/dir /local/dir
  2. 字符编码问题

    • 若文件名含中文,需提前设置编码避免跳过错乱:
      set ftp:charset UTF-8
      set file:charset UTF-8
  3. 排除临时文件

    • 结合 --exclude 过滤无关文件,减少无效传输:
      mirror --exclude "*.tmp" --exclude ".DS_Store" /remote/dir /local/dir

通过上述方法,可高效实现「增量下载」,避免重复传输已存在的文件。

4. 高级功能

断点续传

  • 默认启用,中断后重新执行 get 或 put 命令会自动续传。
  • 强制重新传输:
    get -c remote_file.txt  # -c 表示续传

多线程传输

  • 启用多线程(加速大文件传输):
    set cmd:parallel 5     # 使用 5 个线程
    get large_file.iso

镜像同步

  • 下载远程目录:
    mirror /remote/dir /local/dir
    • 仅同步新文件:
      mirror --only-newer /remote/dir /local/dir
  • 同步并删除本地多余文件:
    mirror --delete /remote/dir /local/dir

后台任务管理

  • 后台传输:
    get large_file.iso &
  • 查看后台任务:
    jobs
  • 等待任务完成:
    wait <job_id>

5. 配置文件优化

配置文件路径

  • 全局配置:/etc/lftp.conf
  • 用户配置:~/.lftprc 或 ~/.config/lftp/rc

常用配置项

  • 设置默认传输线程数:
    set cmd:parallel 3
  • 启用被动模式(解决 FTP 连接问题):
    set ftp:passive-mode yes
  • 限制传输速率(单位:字节/秒):
    set net:limit-rate 204800  # 限速 200KB/s
  • 自动重试连接:
    set net:max-retries 5      # 最大重试次数
    set net:reconnect-interval-base 30  # 重试间隔(秒)

书签管理

  • 添加书签:
    bookmark add myserver sftp://user:pass@example.com:22/path/to/dir
  • 使用书签连接:
    lftp myserver

6. 注意事项

路径问题

  • 本地路径:以 / 或 ./ 开头表示绝对或相对路径。
  • 远程路径:默认从用户根目录开始,建议使用绝对路径(如 /var/www)。

协议差异

  • FTP:可能需要被动模式(set ftp:passive-mode yes)。
  • SFTP:支持密钥认证:
    open sftp://user@example.com -p 22
    # 自动读取 ~/.ssh/id_rsa 私钥

权限与所有权

  • SFTP 可修改权限(chmod),但 FTP 通常依赖服务器配置。
  • 上传文件默认权限由服务器决定(通常 umask 控制)。

日志与调试

  • 启用传输日志:
    set xfer:log yes
    set xfer:log-file ~/lftp.log
  • 调试连接问题:
    set debug yes  # 显示详细网络交互

7. 典型场景示例

批量上传所有 .log 文件

lftp sftp://user:pass@example.com
cd /remote/logs/
mput /local/logs/*.log
exit

定时同步目录(脚本)​

创建脚本 sync.sh

#!/bin/bash
lftp -c "open -u user,pass sftp://example.com; mirror -R --delete --parallel=5 /local/web/ /remote/web/"

添加到 crontab:

0 3 * * * /path/to/sync.sh  # 每天凌晨 3 点执行

8. 常见问题解决

连接超时

  • 检查防火墙或安全组设置。
  • 尝试切换主动/被动模式:
    set ftp:passive-mode on/off

证书错误(SFTP/HTTPS)​

  • 忽略证书验证(不推荐):
    set ssl:verify-certificate no

中文乱码

  • 设置字符编码:
    set file:charset UTF-8
    set ftp:charset GBK

配置文件地址:/etc/lftp.conf 


掌握以上内容后,lftp 可替代图形化工具(如 FileZilla),尤其适合需要自动化或处理大量数据传输的场景。建议通过 man lftp 或 help 命令查看完整文档。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

浩瀚之水_csdn

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值