リモート サーバーからローカル サーバーにファイルを転送します。これが完了したら、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
。OS については言及していませんが、/bin/sh として bash がないようです。もちろん、 を使用する場合は、これらは必要ありませんrsync
。