我將文件從遠端伺服器傳輸到本機伺服器。如果完成此操作,我會進行比較以檢查兩個檔案是否相同,以檢查傳輸是否成功。所以我這樣做:
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
當然,如果您使用這些,則這些都不是必需的。