원격 서버에서 로컬 서버로 파일을 전송합니다. 이 작업이 완료되면 전송이 성공했는지 확인하기 위해 두 파일이 동일한지 확인하기 위해 diff를 수행합니다. 그래서 저는 이렇게 합니다:
ssh -o StrictHostKeyChecking=no -l ${SSH_USER} ${SSH_HOST} "cat $FOLDERPATH_REMOTE.tar.gz" | diff - "$FOLDERPATH_LOCAL.tar.gz"
if [[ $? -eq 0 ]]; then
echo "\n##### Remove file from remote machine #####\n"
rm -f $FOLDERPATH_REMOTE.tar.gz
fi
이렇게 하면 항상 다음과 같은 오류가 발생합니다.
diff: /home/backups/test.tar.gz: No such file or directory
그리고
[[: not found
하지만 내가 할 때 cat /home/backups/test.tar.gz
파일이 존재합니다. 따라서 명령은 로컬 시스템과 원격 시스템을 구별하지 못하고 ssh 명령 이후의 if가 실행되지 않습니다.
내가 뭘 잘못하고 있는지 아는 사람 있나요?
추신: 또 다른 초보 질문입니다. 언제 이런 변수를 작성해야 합니까? ${VAR}
언제 like 를 작성해야 합니까 $VAR
?
답변1
rsync
와 함께 사용하세요 --remove-source-files
.
rsync --remove-source-files "${SSH_USER}@${SSH_HOST}:$FOLDERPATH_REMOTE.tar.gz" \
"$FOLDERPATH_LOCAL.tar.gz"
${VAR}
다른 질문에 대한 응답으로 변수 이름을 단어 중간에 넣을 때 사용해야 하며 -
미세한 .
구분 기호이지만 _
그렇지 않습니다.
echo $var.txt # same as ${var}.txt
echo $var-2020.txt # same as ${var}-2020.txt
echo $var_2020.txt # same as ${var_2020}.txt
[ "$?" -eq 0 ]
또한 오류를 피하기 위해 사용해야 합니다 [[ not found
. OS를 언급하지 않았지만 /bin/sh에 bash가 없는 것 같습니다. rsync
물론 사용한다면 이 중 어느 것도 필요하지 않습니다 .