2017-10-02 17 views
1

두 컴퓨터간에 매일 파일 전송을 bash 스크립팅하려고합니다. 스크립트는 대상 컴퓨터에서 실행되고 원본 컴퓨터에서 파일을 가져옵니다. 때로는 소스 컴퓨터가 파일을 준비하지 못하는 경우도 있습니다.SFTP/SCP로 특정 오류 조건 무시 파일 전송

성공적인 전송에서 스크립트가 0을 종료하고 전송할 파일이없는 경우. 다른 모든 실패 조건 (연결 등)에서 스크립트가 0이 아닌 상태로 종료되도록하고 싶습니다.

나는 다음과 같은 두 가지 접근법을 시도했다. SCP에서 리턴 코드는 실제 오류와 상관없이 항상 1이므로 스크립트가 내 오류 조건을 구별하는 데 어려움이있다.

sftp 메서드는 명령 실행 중에도 항상 0을 반환하는 것처럼 보입니다. 어떤 제안? 당신은 아마의 존재 여부를 테스트하기 위해 원격으로 임의의 코드를 실행할 수 있도록 분명히, 암호없이 SCP를 실행하는 하지만 -이 유효성을 검사하지 않은

scpGet(){ 
  echo "Attempting File Transfer" 
  scp -P $REMOTEPORT $REMOTEHOST:$REMOTEPATH $LOCALPATH 
  echo $? 
} 
sftpGet(){ 
cd $LOCALPATH 
sftp -P $REMOTEPORT $REMOTEHOST << EOF 
get $REMOTEPATH 
quit 
EOF 
echo $? 
} 

답변

0

, 그래서 실제로 당신이 원하는 것을 확인하십시오 파일. 조심해.

scpGet() { 
    echo "Attempting File Transfer" 
    if scp -P $REMOTEPORT $REMOTEHOST:$REMOTEPATH $LOCALPATH 
    then echo "$(ls -l $LOCALPATH) - successfully retrieved" 
    elif ssh -P $REMOTEPORT ls -l $REMOTEHOST:$REMOTEPATH 
    then echo "$REMOTEHOST:$REMOTEPATH exists, but I can't retrieve it!" >&2 
     exit $oopsieCode 
    elif ((2 == $rc)) # ls failed to find the file - verify this code 
    then echo "File not ready. Ignoring." 
    else : handle errors other than "not found" 
    fi 
} 
+0

대단히 감사합니다. Paul, 당신은 저에게 올바른 길을 인도했습니다. 게다가, 지금은 파일이 먼저 있는지 확인하고, 그렇지 않으면 나머지 스크립트를 중단합니다. – Brad87

+0

도와 드리겠습니다. :) –