gur*_*one 5 scripting ftp lftp
我想编写一个 lftp 脚本,每 x 时间从服务器每 15 分钟下载一次文件。
有人可以建议我如何做到这一点吗?
谢谢
小智 12
第一:创建脚本。你可以随心所欲地称呼它。我会叫它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
Run Code Online (Sandbox Code Playgroud)
第二:将其添加到 crontab。如果你想在一小时内每 15 分钟执行一次:
45,30,15,00 * * * * /home/user/downloader.sh >/dev/null 2>&1
Run Code Online (Sandbox Code Playgroud)
如果你想每 15 分钟执行一次,不管开始时间是什么时候:
*/15 * * * * /home/user/downloader.sh >/dev/null 2>&1
Run Code Online (Sandbox Code Playgroud)
解释变量:
PROTOCOL
- 使用什么协议。lftp
支持其中的一个很好的范围:ftp, ftps, http, https, hftp, fish, sftp
和file
。https 和 ftps 需要使用 OpenSSL 或 GNU TLS 支持编译 lftp。URL
- 服务器的名称或 IP。你甚至可以添加:PORT
如果您的服务器不使用正在使用的协议的默认端口,在最后。LOCALDIR
- 在哪里保存文件。REMOTEDIR
- 在cd
远程服务器上的何处获取文件。USER
和PASSWORD
- ftp 凭据。REGEX
- 正则表达式来过滤要下载的文件。例如,如果您只想下载确定扩展名的文件,它会很有用。*
如果您想下载所有内容,请使用。LOG
- 日志文件位置。解释一些代码逻辑:
1. - 如果
if [ ! $? -eq 0 ]; then
fi
Run Code Online (Sandbox Code Playgroud)
该$?
变量是一个特殊的 bash 变量,意思是“上一个命令的状态代码”。Bash 总是在成功执行命令时返回零,因此,比较-eq
(等于)与!
an 上的起始(负)if
应该足以查看是否cd
和lftp
执行过程中有问题。如果您想要更好地记录所发生的事情,则必须浏览这些命令的文档。
2. - 继承人
lftp $PROTOCOL://$URL <<- DOWNLOAD
DOWNLOAD
Run Code Online (Sandbox Code Playgroud)
bash 继承人。这是说“用这个输入列表提供这个命令”的一种方式。我已经命名了限制字符串,DOWNLOAD
因此,介于<<- DOWNLOAD
和之间的所有内容都DOWNLOAD
将输入到lftp
. 你会在互联网上看到带有<<
符号的例子,但我更喜欢这个<<-
版本,因为它支持缩进。
3. - lftp 命令
user $USER "$PASS"
cd $REMOTEDIR
mget -E $REGEX
Run Code Online (Sandbox Code Playgroud)
这些分别是lftp
该方法的内部命令,使用$USER
登录名和"$PASS"
密码验证用户,更改为$REMOTEDIR
和批量下载带有$REGEX
关键字的任何内容。您可以通过简单地输入 来学习它们lftp
,一旦打开 lftp shell,输入?
并按下Enter或? lftp-command-you-want
并按下Enter。例子:
[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
Run Code Online (Sandbox Code Playgroud)
与 know that mget
will be right command inside有关的知识lftp
来自阅读联机帮助页并搜索“bulk”、“multi”或“mass”等关键字,并且知道该ftp(1)
命令也具有该mget
命令,因此可能lftp
会有等价物。
手册页: lftp(1)
归档时间: |
|
查看次数: |
29609 次 |
最近记录: |