Diff에 파일이 존재하지 않는다고 표시됩니다. 이유는 무엇입니까?

Diff에 파일이 존재하지 않는다고 표시됩니다. 이유는 무엇입니까?

원격 서버에서 로컬 서버로 파일을 전송합니다. 이 작업이 완료되면 전송이 성공했는지 확인하기 위해 두 파일이 동일한지 확인하기 위해 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물론 사용한다면 이 중 어느 것도 필요하지 않습니다 .

관련 정보