Linux/Unix:lftp命令以镜像文件和目录

时间:2020-01-09 10:41:11  来源:igfitidea点击:

如何使用lftp命令从远程FTP服务器镜像文件?
在Linux和Unix之类的操作系统下,如何使用lftp命令将整个目录从本地磁盘放置到远程FTP服务器(反向镜像)?

lftp命令是一个文件传输程序,它允许与其他主机的复杂FTP,HTTP和其他连接。

lftp命令具有内置的镜像,可以下载或更新整个目录树。
还有一个反向镜像(镜像-R),用于上载或更新服务器上的目录树。
镜像还可以使用FXP(如果有)在两个远程服务器之间同步目录。
语法为:

mirror
mirror options
mirror -c
mirror -R

关于文件传输/镜像选项和数据安全性的说明

请注意,lftp可以使用FTP,FTPS(安全选项),HTTP,HTTPS(安全选项),HFTP,FISH,SFTP和文件支持多种文件访问方法。
仅当系统上已安装并配置了OpenSSL时,安全选项才有效。
我建议您仅使用FTPS/HTTPS或通过VPN使用FTP/HTTP。

示例:如何从远程ftp服务器镜像文件(获取文件)

首先,您需要使用以下语法连接到远程ftp服务器:

lftp ftp.theitroad.local

或者

lftp ftps.theitroad.local

输入用户名和密码:

lftp ftp.theitroad.local:~> user [email protected]

输出示例:

Password: 
lftp [email protected]@rawlogs.bitgravity.com:~>

执行ls命令以查看文件列表:

lftp ftp.theitroad.local:~> 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.theitroad.local:~> mirror

使用mirror lftp命令,您可以将源目录指定为本地目标目录。
如果目标目录以斜杠结尾,则源基本名称将追加到目标目录名称之后。
源和/或目标可以是指向目录的URL。
语法为:

lftp ftp.theitroad.local:~> mirror source target

或者

lftp ftp.theitroad.local:~> mirror logs/ /data/wwwlogs

我强烈建议您使用恢复选项开始镜像作业。
这可以确保如果ftp镜像由于网络连接而失败,那么它只会下载部分文件

lftp ftp.theitroad.local:~> mirror -c source target

或者

lftp ftp.theitroad.local:~> mirror --continue

要仅下载较新的文件(-c将不起作用):

lftp ftp.theitroad.local:~> mirror --only-newer

或者

lftp ftp.theitroad.local:~> mirror -n

您可以使用以下语法并行下载文件(" -P"(大写P)或" --parallel = N")来加快ftp镜像操作:

lftp ftp.theitroad.local:~> mirror -P

要并行下载10个文件,请执行:

lftp ftp.theitroad.local:~> mirror --parallel=10

您可以使用pget传输每个文件:

lftp ftp.theitroad.local:~> mirror -c  --use-pget-n=10

示例:如何将镜像文件反向到远程ftp服务器(放置文件)

您需要传递-R或--reverse选项来进行反向镜像,即将本地磁盘上的所有文件放到远程ftp服务器上,包括子目录和其中的所有文件。
在此示例中,将/home/project/website/version5 /反向镜像到名为ftp.theitroad.local的远程ftp服务器:首先,您需要使用以下语法连接到远程ftp服务器:

lftp ftp.theitroad.local

输入用户名和密码:

lftp ftp.theitroad.local:~> user [email protected]

输出示例:

Password: 
lftp [email protected]@rawlogs.bitgravity.com:~>

将本地目录更改为/home/project/website/version5 /:

lftp ftp.theitroad.local:~> lcd /home/project/website/version5/

输出示例:

lcd ok, local cwd=/home/project/website/version5

要上传,请执行:

lftp ftp.theitroad.local:~> mirror -R

或按以下方式设置本地目录和远程上传目录:

lftp ftp.theitroad.local:~> mirror -R /home/Hyman/projects/website/version10 /var/www/html

使用-R时,第一个目录是本地目录,第二个目录是远程目录。
如果省略第二个目录,则使用第一个目录的基本名称。
如果省略两个目录,则使用当前的本地和远程目录。
如果目标目录以斜杠(根目录除外)结尾,那么将追加源目录的基本名称。
要退出ftp会话,请执行:

lftp ftp.theitroad.local:~> quit

lftp镜像命令选项的完整列表

从手册页中获取:

-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