2017-04-18 1 views
0

현재 FTP 사이트에서 파일을 다운로드하는 bash 스크립트가 있습니다. 모든 파일의 목록을 유지하고 매니페스트에없는 새 파일 만 다운로드하도록 스크립트를 수정하고 싶습니다. bash에서이 작업을 수행 할 수있는 방법이 있습니까? 아니면 bash가 실제로 수행 할 수있는 한계를 밀고 있습니까?Bash 이전에 파일을 다운로드하지 않은 경우에만 FTP에서 파일을 다운로드하는 스크립트

+0

속도와 관련 파일의 수에 따라 다릅니다. 나는 매분마다 수천 개의 파일을 검사하는 것과 같은 것을 썼다. 목록을 유지하고 나열된 크기와 비교하여받은 크기를 확인합니다. lftp를 사용하여 꽤 잘 작동합니다. 그러나 간단한 경우 rsync를 사용할 수 있습니다. –

+0

안타깝게도 로컬의 파일은 아카이브로 이동되지만 리모컨의 파일은 가끔 이동하기 때문에 rsync를 옵션으로 사용할 수 없습니다. 나는이 일을 하루에 2 ~ 3 회하고 파일 수는 약 1-10 (그리고 10은 많이) 일 수 있습니다. 내가 도울 수 있다면 나는 lftp를 위해 열려있다. 고맙습니다! – Danny

+0

어. 코드는 약 500 줄이고/private/data를 가지고 있지만 기본적으로 'ls'명령에 lftp를 사용하고 이전의 명령에서 제공 한 것과 비교하여 출력과 비교 (sort 및 2 'interleaved bash 루프를 통해)를 기록합니다 다음 lftp 'get'스크립트 파일을 작성하여 호출하십시오. –

답변

0

내 제안은 다운로드하려는 파일 목록을 가져 와서 매니페스트와 비교 한 다음 매니페스트가 아닌 파일을 다운로드하는 것입니다. 이런 식으로 뭔가 작업을해야합니다 :

ftp [email protected] <<EOF 
ls * filelist.txt 
EOF 
cat filelist.txt | awk '{print $9}' | tail -n +3 > filenames.txt 
while IFS= read -r file 
    do 
    if [[ ! $(grep "$file" manifest.txt) ]]; then 
     echo "$file is not in manifest" 
    fi 
    done < "filenames.txt" 

는 물론, 당신이 filelist.txtfilenames.txt 적절한 경로를 포함하도록 변경해야합니다. 또한 echo 명령을 변경하여 실제 다운로드를 수행하는 데 사용할 파일이나 변수에 파일 이름을 추가하십시오. 여기

는 무슨 일이 일어나고 있는지에 대한 설명입니다 : (. 당신은 올바른 디렉토리를 가리 키도록 *을 변경하려는거야)

은 처음 세 줄은 파일의 목록을 잡아 ftp를 사용

cat 라인은 ftp ls 명령의 출력을 구문 분석하여 파일 이름 부분 만 잡고 다른 파일에 넣습니다.

while 루프는 파일 목록을 검토하고 grep을 사용하여 파일 이름이 매니페스트 파일에 있는지 확인합니다. 그렇지 않은 경우 다운로드하여 매니페스트에 추가 할 수 있습니다.

궁금한 점이 있으면 알려주세요.

희망이 도움이됩니다.

+0

감사합니다. 새로 다운로드 한 파일 이름으로 매니페스트를 업데이트하는 가장 좋은 방법은 무엇입니까? 고마워! – Danny

+0

매니페스트에 저장할 정보에 따라 다음과 같이 할 수 있습니다 :'echo "$ file - $ (date)">> manifest.txt' - 두 배 이상 (''>>' ")는 결과를 파일에 추가하는 것을 의미하고'$ (date)'는 date 명령의 출력을 가져온다. ('Tue Apr 18 10:34:52 PDT 2017'). –

관련 문제