下载文件的 LFTP 脚本

下载文件的 LFTP 脚本

我想编写一个 lftp 脚本,该脚本将每隔 x 时间从服务器每 15 分钟下载一次文件。

有人可以建议我该怎么做吗?

谢谢

答案1

第一的:创建一个脚本。你可以随意称呼它。我会打电话给它downloader.sh

#!/bin/bash
PROTOCOL="ftp"
URL="server.example.com" 
LOCALDIR="/home/user/downloads"
REMOTEDIR="dir/remote/server/"
USER="user"
PASS="password"
REGEX="*.txt"
LOG="/home/user/script.log"

cd $LOCALDIR
if [  ! $? -eq 0 ]; then
    echo "$(date "+%d/%m/%Y-%T") Cant cd to $LOCALDIR. Please make sure this local directory is valid" >> $LOG
fi

lftp  $PROTOCOL://$URL <<- DOWNLOAD
    user $USER "$PASS"
    cd $REMOTEDIR
    mget -E $REGEX
DOWNLOAD

if [ ! $? -eq 0 ]; then
    echo "$(date "+%d/%m/%Y-%T") Cant download files. Make sure the credentials and server information are correct" >> $LOG
fi

第二: 将其添加到 crontab 中。如果您想在一小时内每隔 15 分钟执行一次:

45,30,15,00 * * * * /home/user/downloader.sh >/dev/null 2>&1

如果您想每 15 分钟执行一次,无论从哪一分钟开始:

*/15 * * * * /home/user/downloader.sh >/dev/null 2>&1

解释变量:

  • PROTOCOL- 使用什么协议。lftp支持其中的很大范围:ftp, ftps, http, https, hftp, fish, sftpfile。 https 和 ftps 需要使用 OpenSSL 或 GNU TLS 支持来编译 lftp。
  • URL- 服务器的名称或 IP。如果您的服务器不使用正在使用的协议的默认端口,您甚至可以:PORT在末尾添加。
  • LOCALDIR- 文件保存位置。
  • REMOTEDIR- 在远程服务器上的何处cd获取文件。
  • USERPASSWORD- ftp 凭证。
  • REGEX- 正则表达式来过滤要下载的文件。例如,如果您只想下载确定扩展名的文件,它会很有用。*如果您想下载所有内容,请使用。
  • LOG- 日志文件位置。

解释一下一些代码逻辑:

1.- 如果

if [  ! $? -eq 0 ]; then
fi

$?变量是一个特殊的 bash 变量,意思是“最后一个命令的状态代码”。 Bash 在成功执行命令时总是返回零,因此,将-eq(等于)与!a 上的起始(负)进行比较if应该足以查看执行过程中是否cd存在lftp问题。如果您想要更好地记录所发生的情况,则必须浏览这些命令的文档。

2.- 这里文档

lftp  $PROTOCOL://$URL <<- DOWNLOAD
DOWNLOAD

bash 此处文档。这是一种表达“使用此输入列表提供此命令”的方式。我已命名限制字符串DOWNLOAD,因此<<- DOWNLOAD和之间的所有内容DOWNLOAD都将输入到lftp.您将在互联网上看到带有<<符号的示例,但我更喜欢该<<-版本,因为它支持缩进。

3.-lftp命令

    user $USER "$PASS"
    cd $REMOTEDIR
    mget -E $REGEX

这些是内部命令,分别表示使用登录名和密码lftp对用户进行身份验证、更改为以及使用关键字批量下载任何内容。您只需键入 即可了解它们,一旦 lftp shell 打开,键入并按或并按。例子:$USER"$PASS"$REMOTEDIR$REGEXlftp?Enter? lftp-command-you-wantEnter

[root@host ~]# lftp
lftp :~> ?
    !<shell-command>                     (commands)                           alias [<name> [<value>]]
    attach [PID]                         bookmark [SUBCMD]                    cache [SUBCMD]
    cat [-b] <files>                     cd <rdir>                            chmod [OPTS] mode file...
    close [-a]                           [re]cls [opts] [path/][pattern]      debug [<level>|off] [-o <file>]
    du [options] <dirs>                  exit [<code>|bg]                     get [OPTS] <rfile> [-o <lfile>]
    glob [OPTS] <cmd> <args>             help [<cmd>]                         history -w file|-r file|-c|-l [cnt]
    jobs [-v] [<job_no...>]              kill all|<job_no>                    lcd <ldir>
    lftp [OPTS] <site>                   ln [-s] <file1> <file2>              ls [<args>]
    mget [OPTS] <files>                  mirror [OPTS] [remote [local]]       mkdir [-p] <dirs>
    module name [args]                   more <files>                         mput [OPTS] <files>
    mrm <files>                          mv <file1> <file2>                   [re]nlist [<args>]
    open [OPTS] <site>                   pget [OPTS] <rfile> [-o <lfile>]     put [OPTS] <lfile> [-o <rfile>]
    pwd [-p]                             queue [OPTS] [<cmd>]                 quote <cmd>
    repeat [OPTS] [delay] [command]      rm [-r] [-f] <files>                 rmdir [-f] <dirs>
    scache [<session_no>]                set [OPT] [<var> [<val>]]            site <site-cmd>
    source <file>                        torrent [-O <dir>] <file|URL>...     user <user|URL> [<pass>]
    wait [<jobno>]                       zcat <files>                         zmore <files>

lftp :~> ? mget
Usage: mget [OPTS] <files>
Gets selected files with expanded wildcards
 -c  continue, resume transfer
 -d  create directories the same as in file names and get the
     files into them instead of current directory
 -E  delete remote files after successful transfer
 -a  use ascii mode (binary is the default)
 -O <base> specifies base directory or URL where files should be placed

mget与知道这将是内部正确命令相关的知识lftp来自阅读联机帮助页并搜索“bulk”、“multi”或“mass”等关键词,并知道ftp(1)命令也有mget命令所以,可能lftp会有一个等效的命令。

联机帮助页: lftp(1)

相关内容