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 未執行。

有人知道我做錯了什麼嗎?

PS:還有另一個初學者問題:我什麼時候必須寫這樣的變量${VAR},什麼時候必須寫這樣的變數$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錯誤 - 您沒有提到您的作業系統,但您似乎沒有將 bash 作為 /bin/sh。rsync當然,如果您使用這些,則這些都不是必需的。

相關內容