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

有人知道我做错了什么吗?

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当然,如果您使用,则这些都不是必需的。

相关内容