接続が失われた場合のSSHファイル転送はどうなりますか?

接続が失われた場合のSSHファイル転送はどうなりますか?

gzipで圧縮してリモートサーバーに送信するパスが%pのファイルがいくつかありますが、rsyncや同様のミラーリングツールを使用できないとします。私は次のことを行います。

gzip -c -9 %p | ssh user@server  "cat > backupPath"

基本的な通常の状況ではうまくいきますが、ファイル転送中にリモートサーバー接続が失敗した場合は、ファイルが正しく送信され保存されていることを確認したいので、どうなるかを知りたいです。ファイルの一部だけが「backupPath」に書き込まれますか、それとも「全部または専務」戦略に従いますか?つまり、エラーが発生し、「backupPath」アドレスを持つファイルがリモートホストに作成されません(私に適しています)。より良い)?

ベストアンサー1

プロセスの観点からは、catstdinからstdoutにデータをコピーするだけであり、データが完全であるか、特に完全であるかはわかりません。したがって、あなたの質問に対する答えは次のとおりです。いいえこれは「全部または専務」戦略ではありません。

2段階で行うことができ、より強力になります。

 #/bin/bash
 set -e
 set -o pipefail
 gzip -c -9 %p | ssh user@server  "cat > backupPath.tmp"
 ssh user@server  "mv backupPath.tmp backupPath"

これは%p元の投稿からコピーされ、シェル構文ではありません。

おすすめ記事