用於下載文件的 LFTP 腳本
我想編寫一個 lftp 腳本,每隔 x 時間從伺服器每 15 分鐘下載一次文件。
有人可以建議我怎麼做嗎?
謝謝
**第一:**創建腳本。你可以隨心所欲地稱呼它。我會打電話
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, 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
該
$?
變數是一個特殊的 bash 變數,意思是“最後一個命令的狀態碼”。Bash 在成功的命令執行時總是返回零,因此,比較-eq
(等於)與!
an 上的開始(負數)if
應該足以查看執行過程中是否cd
存在lftp
問題。如果您想更好地記錄發生的事情,則必須瀏覽這些命令的文件。2. -heredocs
lftp $PROTOCOL://$URL <<- DOWNLOAD DOWNLOAD
bash heredocs。這是一種說“用這個輸入列表輸入這個命令”的方式。我已經命名了限製字元串
DOWNLOAD
,因此,介於<<- DOWNLOAD
和之間的所有內容都DOWNLOAD
將輸入到lftp
. 您將在 Internet 上看到帶有<<
符號的範例,但我更喜歡該<<-
版本,因為它支持縮進。3. - lftp 命令
user $USER "$PASS" cd $REMOTEDIR mget -E $REGEX
這些是
lftp
該方法的內部命令,分別是使用$USER
登錄名和"$PASS"
密碼驗證使用者,更改為$REMOTEDIR
和批量下載任何帶有$REGEX
關鍵字的內容。您可以通過簡單地鍵入來學習它們lftp
,並且在打開 lftp shell 後,鍵入?
並按下Enter
or? 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
與知道這
mget
將是正確的命令相關的知識lftp
來自閱讀手冊頁並蒐索“bulk”、“multi”或“mass”等關鍵字,並且知道該ftp(1)
命令也有該mget
命令,因此可能lftp
會有一個等價的命令。手冊頁:
lftp(1)