내 FTP 스크립트가 mget 명령을 사용하여 모든 파일을 가져올 수 없는 이유는 무엇입니까?

내 FTP 스크립트가 mget 명령을 사용하여 모든 파일을 가져올 수 없는 이유는 무엇입니까?

다른 서버에서 데이터를 가져오고 외부 파일에서 세부 정보를 읽는 스크립트가 있습니다. 파일을 읽고 자세한 출력에 일치하는 모든 파일이 표시되지만 원격 호스트에서는 파일 하나만 가져옵니다. 아래는 내 스크립트입니다.

while IFS=','; read region sdp ip1 ip2 ip3 user1 pass1 user2 pass2 user3 pass3
do

    in=/var/opt/fds/statistics/
    out=/pmautomation/PM/RawFiles/Data/BHCA/$date/$region/$sdp/
    file=\*"PSC-TrafficHandler_8.1_A_"\*"_System."$date\*".stat"

    mkdir -p /pmautomation/PM/RawFiles/Data/BHCA/$date/$region/$sdp/

    ftp -in $ip1<<END_SCRIPT
    quote USER $user1
    quote PASS $pass1
    bin
    prompt off
    lcd /pmautomation/PM/RawFiles/Data/BHCA/$date/$region/$sdp/
    cd /var/opt/fds/statistics/
    binary
    mget *PSC-TrafficHandler_8.1_A_*_System.$date*.stat
    bye
    END_SCRIPT

done < /root/SDP_BHC/bin/Credentials.csv

출력은 다음과 같습니다.

IP: 10.XXX.XX.XX

Interactive mode on.
Local directory now /pmautomation/PM/RawFiles/Data/BHCA/20150802/EAST/WB_SDP49
mget WDSDP49B_PSC-TrafficHandler_8.1_A_2_System.20150802_0000.stat? mget WDSDP49B_PSC-TrafficHandler_8.1_A_2_System.20150802_0100.stat? mget WDSDP49B_PSC-TrafficHandler_8.1_A_2_System.20150802_0200.stat? mget WDSDP49B_PSC-TrafficHandler_8.1_A_2_System.20150802_0300.stat? mget WDSDP49B_PSC-TrafficHandler_8.1_A_2_System.20150802_0400.stat? mget WDSDP49B_PSC-TrafficHandler_8.1_A_2_System.20150802_0500.stat? mget WDSDP49B_PSC-TrafficHandler_8.1_A_2_System.20150802_0600.stat? mget WDSDP49B_PSC-TrafficHandler_8.1_A_2_System.20150802_0700.stat? mget WDSDP49B_PSC-TrafficHandler_8.1_A_2_System.20150802_0800.stat? mget WDSDP49B_PSC-TrafficHandler_8.1_A_2_System.20150802_0900.stat? mget WDSDP49B_PSC-TrafficHandler_8.1_A_2_System.20150802_1000.stat? mget WDSDP49B_PSC-TrafficHandler_8.1_A_2_System.20150802_1100.stat? mget WDSDP49B_PSC-TrafficHandler_8.1_A_2_System.20150802_1200.stat? mget WDSDP49B_PSC-TrafficHandler_8.1_A_2_System.20150802_1300.stat? mget WDSDP49B_PSC-TrafficHandler_8.1_A_2_System.20150802_1400.stat? mget WDSDP49B_PSC-TrafficHandler_8.1_A_2_System.20150802_1500.stat? mget WDSDP49B_PSC-TrafficHandler_8.1_A_2_System.20150802_1600.stat? mget WDSDP49B_PSC-TrafficHandler_8.1_A_2_System.20150802_1700.stat? mget WDSDP49B_PSC-TrafficHandler_8.1_A_2_System.20150802_1800.stat? mget WDSDP49B_PSC-TrafficHandler_8.1_A_2_System.20150802_1900.stat? mget WDSDP49B_PSC-TrafficHandler_8.1_A_2_System.20150802_2000.stat? mget WDSDP49B_PSC-TrafficHandler_8.1_A_2_System.20150802_2100.stat? mget WDSDP49B_PSC-TrafficHandler_8.1_A_2_System.20150802_2200.stat? mget WDSDP49B_PSC-TrafficHandler_8.1_A_2_System.20150802_2300.stat? 

내 mget 명령이 모든 파일을 가져오지 않고 일치하는 모든 파일에서 단 하나의 파일만 가져오지 못하는 이유는 무엇입니까?

답변1

Jeff로부터 몇 가지 조언을 받았습니다. 어떻게 든 프롬프트 끄기가 작동하지 않고 일치하는 파일에 대한 프롬프트가 표시됩니다. mget명령 아래에 "y"를 입력해 보았 더니 제대로 작동했습니다. 업데이트된 코드는 다음과 같습니다.

while IFS=','; read region sdp ip1 ip2 ip3 user1 pass1 user2 pass2 user3 pass3
do

    in=/var/opt/fds/statistics/
    out=/pmautomation/PM/RawFiles/Data/BHCA/$date/$region/$sdp/
    file=\*"PSC-TrafficHandler_8.1_A_"\*"_System."$date\*".stat"

    mkdir -p /pmautomation/PM/RawFiles/Data/BHCA/$date/$region/$sdp/

    ftp -in $ip1<<END_SCRIPT
    quote USER $user1
    quote PASS $pass1
    bin
    prompt off
    lcd /pmautomation/PM/RawFiles/Data/BHCA/$date/$region/$sdp/
    cd /var/opt/fds/statistics/
    binary
    mget *PSC-TrafficHandler_8.1_A_*_System.$date*.stat
    y
    y
    y
    y
    bye
    END_SCRIPT

done < /root/SDP_BHC/bin/Credentials.csv

이것은 정말 이상한 행동이지만 나에게는 효과가 있습니다. 운 좋게도 나는 원격 호스트에 있는 파일 수를 알고 있었고 동일한 수의 "y"를 입력하여 작동시켰습니다.

답변2

"여기" 문서 끝에서 탭을 제거해 보셨나요? 스크립트가 끝을 감지하지 못하므로 이것이 문제일 수 있습니다.

while IFS=','; read region sdp ip1 ip2 ip3 user1 pass1 user2 pass2 user3 pass3
do

    in=/var/opt/fds/statistics/
    out=/pmautomation/PM/RawFiles/Data/BHCA/$date/$region/$sdp/
    file=\*"PSC-TrafficHandler_8.1_A_"\*"_System."$date\*".stat"

    mkdir -p /pmautomation/PM/RawFiles/Data/BHCA/$date/$region/$sdp/

    ftp -in $ip1<<END_SCRIPT
    quote USER $user1
    quote PASS $pass1
    bin
    prompt off
    lcd /pmautomation/PM/RawFiles/Data/BHCA/$date/$region/$sdp/
    cd /var/opt/fds/statistics/
    binary
    mget *PSC-TrafficHandler_8.1_A_*_System.$date*.stat
    bye
END_SCRIPT    <----------

done < /root/SDP_BHC/bin/Credentials.csv

답변3

사용 wget.

while IFS=','; read region sdp ip1 ip2 ip3 user1 pass1 user2 pass2 user3 pass3
do
    in=/var/opt/fds/statistics/
    out=/pmautomation/PM/RawFiles/Data/BHCA/$date/$region/$sdp/
    file=\*"PSC-TrafficHandler_8.1_A_"\*"_System."$date\*".stat"

    mkdir -p $out
    cd $out

    wget --ftp-user=$user1 --ftp-password=$pass1 ftp://$ip1/$in/$file

done < /root/SDP_BHC/bin/Credentials.csv

관련 정보