linux下lftp命令中mirror的用法详解

发布时间:2020-02-12编辑:脚本学堂
本文介绍下,在linux中,有关lftp命令的mirror的用法,有需要的朋友,作个参考吧。

linux系统中,lftp是个功能强大的文件传输工具,支持命令补全、历史记录、多任务后台执行,还有书签、排队、镜像、断点续传、多进程下载等功能。
lftp命令在操作上,类似于shell/ target=_blank class=infotextkey>shell脚本,对shell了解的朋友,掌握这个命令会很快。

lftp支持ftp, ftps, http, https, hftp, fish, sftp, file等多种文件访问方式(https和ftps方式只有lftp编译集成了OpenSSL库时才可用)。
可以在open url命令中指定访问方式,比如open http://www.us.kernel.org/pub/linux/.

hftp是ftp-over-http-proxy协议的缩写,即通过http代理的ftp访问,设置ftp:proxy为 http://proxy[:port]后会自动应用。fish是通过ssh连接到unix账户的协议。sftp是
内置了ssh2的访问协议。

lftp中的每项操作都是可靠的,非致命错误都会被忽略同时操作会被重新执行。
比如下载中断,它会重新从中断点开始继续下载;即便ftp服务器不支持断点续传,lftp会从头开始重新下载文件知道文件传输完成。

lftp拥有类似shell的语法,支持并行在后台(&)运行命令,支持用()分组命令并将它们在后台执行。

所有后台任务在同一个进程中执 行。使用^Z(Ctrl+Z)将前台任务切换到后台执行,wait或fg(wait的别名)命令将后台任务切换到前台,使用jobs命令罗列正在执行的任 务。
一些命令(如cat, ls等)允许将输出重定向至文件或通过管道传送给别的命令。
命令能根据前一命令的结束状态有选择性地执行(&&, ||)。

如果在仍有任务未完成的情况下退出lftp, lftp将会把自己切换到nohup模式在后台继续运行,直至任务完成。

lftp内置了镜像功能(mirror命令)允许下载整个目录,反向镜像功能(mirror -R命令)允许上传整个目录到服务器上。镜像功能同样可用于同步两个远程服务器上的文件
夹。

at命令在当前环境下指定在特定的时刻执行某些任务;queue命令将指定的命令在当前服务器上按顺序执行;还有其他很多命令。

启动时,lftp先后执行配置文件:/etc/lftp.conf, ~/.lftprc, ~/.lftp/rc 。
可以在这些配置文件中增加alias或set命令。
希望看到完整协议调试内容的朋友可以通过debug命令来启动调试模式,如使用debug 3将看到所有的问候消息和错误消息。

lftp拥有大量的配置项,可以通过set -a命令来查看所有的配置项和值,set -d命令查看配置项的默认值。配置项可以使用缩写并且省略前导符,只要名称唯一。

如果编译包括了OpenSSL (configure –with-openssl),那么lftp将内置有OpenSSL项目开发的软件功能。

mirror [OPTS] [source [target]]

将源文件夹镜像到目标文件夹。如果目标文件夹以/结尾,原文件夹名称会被附加到目标文件夹名称之后。源和目标都可以是指向文件夹的URL。

-c, –continue 续传上次的任务
-e, –delete 删除远程目录上不存在的文件
   –delete-first 在传输新文件之前删除旧的文件
   –depth-first 进入下一层目录优先于文件传输
-s, –allow-suid 根据远程站点设置suid/sgid比特位
   –allow-chown 尝试将自己设置为文件所有者和所有组
   –ascii 使用ascii方式传输(隐含了–ignore-size)
   –ignore-time 决定是否下载时忽略时间因素
   –ignore-size 决定是否下载时忽略文件大小因素
   –only-missing 只下载缺少的文件
   –only-existing 只下载已经存在于目标文件夹中的文件
-n, –only-newer 只下载新文件(-c参数无法工作)
   –no-empty-dirs 不创建空文件夹(隐含了–depth-first)
-r, –no-recursion 不进入子文件夹
   –no-symlinks 不创建符号链接
-p, –no-perms 不设置文件权限
   –no-umask 不使用文件预设权限
-R, –reverse 反向镜像(上传文件)
-L, –dereference 将符号链接作为文件下载
-N, –newer-than=SPEC 只下载比指定时间晚的文件
   –on-change=CMD 只要有文件或文件夹存在差异就执行命令CMD
   –older-than=SPEC 只下载比指定时间早的文件
   –size-range=RANGE 只下载大小在指定区间上的文件
-P, –parallel[=N] 并行下载N个文件
   –use-pget[-n=N] 使用pget传输每个文件
   –loop 循环知道找不到差异
-i RX, –include RX 包括相匹配的文件
-x RX, –exclude RX 不包括相匹配的文件
-I GP, –include-glob GP 包括相匹配的文件
-X GP, –exclude-glob GP 不包括相匹配的文件
-v, –verbose[=level] 冗长操作
   –log=FILE 将执行的lftp命令写入文件FILE
   –script=FILE 将lftp命令写入文件FILE,但不执行
   –just-print, –dry-run 与–script=-相同
   –use-cache 使用缓存目录列表
–Remove-source-files 传输完成后删除源文件
-a 与–allow-chown –allow-suid –no-umask相同
使用-R时,第一个目录为本地目录,第二个目录为远程目录。如果第二个目录被忽略,将采用第一个目录的目录名。如果两个目录都被忽略,将采用当前的本地和远程目录。
如果目标目录以/结尾,那么源目录名将被加到目标目录上。

RX是扩展的正则表达式,具体语法可参考egrep命令

GP是通配符规则,比如*.zip。

包含和不包含选项可以被多次使用。符合以下规则之一的文件将被镜像传输:(1)符合包含规则而不符合之后的不包含规则;(2)不符合任何规则,但第一条为不包含规则。目
录匹配时包括结尾的/。

注意:符号链接(软链接)不会被传输到远程服务器上,因为无法被FTP协议传输。要上传链接指向的文件,请使用mirror -RL命令(将符号链接视为普通文件)。

对于–newer-than选项,你可以使用文件或时间作为参数。时间参数的格式同at命令,如now-7days、week age等。如果指定为文件,将采用文件的修改时间。

冗长输出级别可以通过–verbose=level选项或者使用多个-v选项进行设定,比如-vvv。冗长输出级别为:

0 – 无输出(默认)
1 – 打印动作
2 – +打印不删除的文件名(当没有采用-e选项时)
3 – +打印
–only-newer关闭文件大小比较,只上传/下载新的文件,即使文件大小存在差异,默认情况下旧的文件会被新的文件代替。

当用URL代替目录时,可以对两台服务器上的目录进行镜像操作。只要可以,会自动使用FXP在FTP服务器之间进行文件传输。

一些ftp服务器默认隐藏了.开头的文件(如.htaccess),只会在LIST命令使用-a选项时显示。在这种情况下,使用设置set ftp:list-options -a。

因为可以给 mirror 命令传入参数,控制同步的行为:
–reverse 上传到FTP上,也可以使用 -R
–delete: 如果远程目录下已经没有某个文件,而本地有,则删除这个文件。
–only-newer: 只下载新的文件。mirror的判定新文件是通过文件大小和修改时间来判定的,我们可以使用
–ignore-time,来屏蔽时间判定,这样mirror只通过大小来判断文件,同步速度加快。
–exculde: 不包含某个目录。
–verbose: 详细输出。

例如:
 

复制代码 代码示例:
mirror –delete –only-newer –verbose work bak/
 

自动备份服务器work文件夹,到本地当前目录的 bak文件夹下,并且删除已经不存在的文件,并且只下载最新的文件,再给出详细的输出。
用 lftp 的 -e 选项,把命令直接接在 lftp 之后:
 

复制代码 代码示例:
lftp -u username,password -e”mirror –delete –only-newer –verbose /work bak/” ftpIP
 

也可以用 at 选项指定备份的时间:
 

复制代码 代码示例:
lftp at 01:00 -u username,password -e”mirror –delete –only-newer –verbose /work bak/” ftpIP
 

这样每天 1 点就会执行备份任务。