2012-09-18 4 views
1

lftp를 사용하여 로컬에서 SFTP 액세스 만 허용하는 원격 서버로 파일을 전송하고 있습니다.LFTP 전송 성공 확인

lftp -c "open -u $UN,$Pass sftp://$Server ; mirror -R $Directory" 

을 그리고 파일을 transffering에 관해서이 모두 잘 작동된다 나는 파일을 전송하려면 다음 구문을 사용하고 있습니다. .sh 파일에 임베드 된 cron으로 이것을 사용하고 있으며 때로는 lftp가 실패합니다 (알 수없는 이유로).

일부 종료 코드 또는 전송의 정확성을 보장하기 위해 사용할 수있는 방법을 사용하여 전송을 확인할 수 있습니까?

+0

누구? 어떤 생각? 이 전송은 로그에 아무 것도 표시되지 않고 간헐적으로 실패합니다. –

답변

4

쉘 스크립트로 감싸 야 할 것입니다. 예를 들어, 같은 lftp는 스크립트를 생성해야합니다

쉘 스크립트 :

set xfer:log true 
set xfer:log-file "/path/to/somewhere/$DATESTAMP.log" 
lcd "/path/of/source" 
open -u $UN,$Pass sftp://$Server 
mirror -R $Directory 
quit 

lftp -f $ScriptName에 의해 실행합니다.

그런 다음 생성 된 로그 파일을 구문 분석하십시오. AFAIK에는 성공적인 송금 만 포함됩니다.

awk '{print $3,$6}' $DATESTAMP.log | sed -r -e 's/ [0-9]+-/ /' 

위의 내용은 각 파일에 대해 전송 된 파일 및 바이트 목록을 생성합니다. 당신은 주

# WARNING: Script assumes that filename contains no space. 
while read fname fsize; do 
    # The following line used if the lftp runs from e.g. the source folder 
    actualname=$Prefix/$fname 
    actualsize=$(stat -c "%s" "$actualname") 
    if ((actualsize != fsize)); then 
    # Some error handling code here 
    fi 
done <<< "$(awk '{print $3,$6}' $DATESTAMP.log | sed -r -e 's/ [0-9]+-/ /')" 

예를

를 들어, 결과를 통해 루프를 할 수있는 실제 파일 크기 비교 : 나는 while 루프 내에서 변수의 조작을 가능하게하는 대신 배관의 "herestring을"이 사용하고 있습니다.