我将文件从远程服务器传输到本地服务器。完成后,我会进行 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
当然,如果您使用,则这些都不是必需的。