ファイルをダウンロードするLFTPスクリプト

ファイルをダウンロードするLFTPスクリプト

時間ごとに15分ごとにサーバーからファイルをダウンロードするlftpスクリプトを作成したいと思います。

誰でも私に何をすべきかを提案できますか?

ありがとう

ベストアンサー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に追加してください。 1時間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はコマンドを正常に実行すると常に0を返すので、a -eq(同じ)と!aの開始(負)を比較すると、if実行に問題がないかどうcdかを確認するのに十分ですlftp。何が起こっているのかをよりよく記録するには、そのコマンドのマニュアルを参照する必要があります。

2.- ドキュメントはこちら

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

bashのドキュメントはこちら。これは、「この入力リストを使用してこのコマンドを入力してください」と言う方法です。制限文字列の名前を指定して、との間DOWNLOAD<<- DOWNLOADすべての内容DOWNLOADをに入力しますlftp。インターネット上のシンボルを含む例を見ることができますが、インデントをサポートしているので、<<このバージョンを好みます。<<-

三。-lftp コマンド

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

これは、それぞれログインとパスワードでlftpユーザーを認証し、キーワードを使用して何でも変更し、一括ダウンロードすることを示す内部コマンドです。 lftpシェルが開いたら、入力するか、キーを押して学習できます。例:$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以下から来ています。マンページを読む「一括」、「多重」、「一括」などのキーワードを検索すると、ftp(1)コマンドにはmgetコマンドもあるため、lftp同等のコマンドがある可能性があります。

マンページ: lftp(1)

おすすめ記事