Linux / Unix lftp 命令用于镜像文件和目录
lftp 命令是一个文件传输程序,允许与其他主机建立复杂的 FTP、HTTP 和其他连接。lftp 命令有一个内置镜像,可以下载或更新整个目录树。还有一个反向镜像(镜像 -R),可以上传或更新服务器上的目录树。镜像还可以在两个远程服务器之间同步目录,如果可用,则使用 FXP。
教程详细信息 | |
---|---|
难度等级 | 简单的 |
Root 权限 | 不 |
要求 | Linux 或 Unix 终端 |
类别 | 下载管理器 |
先决条件 | lftp 命令 |
操作系统兼容性 | *BSD • Linux • macOS • Unix • WSL |
预计阅读时间 | 5 分钟 |
lftp 命令镜像文件和目录
镜像命令的语法如下:
mirror mirror options mirror -c mirror -R
关于文件传输/镜像选项和数据安全的说明
请注意,lftp 可以支持使用 FTP、FTPS(安全选项)、HTTP、HTTPS(安全选项)、HFTP、FISH、SFTP(安全选项)和文件的多种文件访问方法。安全选项仅在您的系统上安装并配置了 OpenSSL 时才有效,这是当今的默认设置。我建议您仅使用 FTPS/HTTPS/SFTP 或使用 VPN 上的 FTP/HTTP,例如OpenVPN或WireGuard。
示例:如何从远程 ftp 服务器镜像文件(获取文件)
首先,您需要使用以下语法连接到远程 ftp 服务器:
lftp ftp.example.com
或
lftp ftps.example.com
输入用户名和密码:
lftp ftp.example.com:~> user vivek@example.com
示例输出:
Password: lftp vivek@example.com@rawlogs.bitgravity.com:~>
输入 ls 命令查看文件列表:
lftp ftp.example.com:~> ls
示例输出:
-rw-r--r-- 1 80 www 36809419 Jun 24 23:59 2012-06-24.log.gz -rw-r--r-- 1 80 www 100912271 Jun 25 23:59 2012-06-25.log.gz -rw-r--r-- 1 80 www 102926055 Jun 26 23:59 2012-06-26.log.gz
要镜像当前目录中的所有上述文件,请输入:
lftp ftp.example.com:~> mirror
使用 mirror lftp 命令,您可以将源目录指定到本地目标目录。如果目标目录以斜杠结尾,则源基本名称将附加到目标目录名称。源和/或目标可以是指向目录的 URL。语法为:
lftp ftp.example.com:~> mirror source target
或者
lftp ftp.example.com:~> mirror logs/ /data/wwwlogs
我强烈建议您使用恢复选项启动镜像作业。这可确保如果 ftp 镜像因网络连接而失败,它只会下载部分文件
lftp ftp.example.com:~> mirror -c source target
或者
lftp ftp.example.com:~> mirror --continue
仅下载较新的文件(-c 不起作用):
lftp ftp.example.com:~> mirror --only-newer
或者
lftp ftp.example.com:~> mirror -n
-P您可以通过并行下载文件( (大写 P)或)来加快 ftp 镜像操作,--parallel=N使用以下语法:
lftp ftp.example.com:~> mirror -P
要并行下载 10 个文件,请输入:
lftp ftp.example.com:~> mirror --parallel=10
您可以使用 pget 来传输每个文件:
lftp ftp.example.com:~> mirror -c --use-pget-n=10
实例:如何反向镜像文件到远程ftp服务器(put文件)
您需要传递-R或--reverse选项来执行反向镜像,即将本地磁盘中的所有文件(包括子目录及其中的所有文件)放入远程 ftp 服务器。在此示例中,将 /home/project/website/version5/ 反向镜像到名为 ftp.example.com 的远程 ftp 服务器:
首先,您需要使用以下语法连接到远程 ftp 服务器:
lftp ftp.example.com
输入用户名和密码:
lftp ftp.example.com:~> user vivek@example.com
示例输出:
Password: lftp vivek@example.com@rawlogs.bitgravity.com:~>
将本地目录更改为 /home/project/website/version5/:
lftp ftp.example.com:~> lcd /home/project/website/version5/
示例输出:
lcd ok, local cwd=/home/project/website/version5
要上传,请输入:
lftp ftp.example.com:~> mirror -R
或者设置本地目录和远程上传目录如下:
lftp ftp.example.com:~> mirror -R /home/vivek/projects/website/version10 /var/www/html
使用 -R 时,第一个目录是本地目录,第二个目录是远程目录。如果省略第二个目录,则使用第一个目录的基本名称。如果省略两个目录,则使用当前本地和远程目录。如果目标目录以斜线结尾(根目录除外),则附加源目录的基本名称。要退出 ftp 会话,请输入:
lftp ftp.example.com:~> quit
lftp mirror 命令选项的完整列表
尝试使用 man 命令或 help 命令阅读手册页:
示例输出:
man lftp
lftp --help
-c, --continue continue a mirror job if possible -e, --delete delete files not present at remote site --delete-first delete old files before transferring new ones --depth-first descend into subdirectories before transferring files -s, --allow-suid set suid/sgid bits according to remote site --allow-chown try to set owner and group on files --ascii use ascii mode transfers (implies --ignore-size) --ignore-time ignore time when deciding whether to download --ignore-size ignore size when deciding whether to download --only-missing download only missing files --only-existing download only files already existing at target -n, --only-newer download only newer files (-c won't work) --no-empty-dirs don't create empty directories (implies --depth-first) -r, --no-recursion don't go to subdirectories --no-symlinks don't create symbolic links -p, --no-perms don't set file permissions --no-umask don't apply umask to file modes -R, --reverse reverse mirror (put files) -L, --dereference download symbolic links as files -N, --newer-than=SPEC download only files newer than specified time --on-change=CMD execute the command if anything has been changed --older-than=SPEC download only files older than specified time --size-range=RANGE download only files with size in specified range -P, --parallel[=N] download N files in parallel --use-pget[-n=N] use pget to transfer every single file --loop loop until no changes found -i RX, --include RX include matching files -x RX, --exclude RX exclude matching files -I GP, --include-glob GP include matching files -X GP, --exclude-glob GP exclude matching files -v, --verbose[=level] verbose operation --log=FILE write lftp commands being executed to FILE --script=FILE write lftp commands to FILE, but don't execute them --just-print, --dry-run same as --script=- --use-cache use cached directory listings --Remove-source-files remove files after transfer (use with caution) -a same as --allow-chown --allow-suid --no-umask