파일을 다운로드하는 LFTP 스크립트

파일을 다운로드하는 LFTP 스크립트

매 x 시간마다 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)

관련 정보