gzipで圧縮してリモートサーバーに送信するパスが%pのファイルがいくつかありますが、rsyncや同様のミラーリングツールを使用できないとします。私は次のことを行います。
gzip -c -9 %p | ssh user@server "cat > backupPath"
基本的な通常の状況ではうまくいきますが、ファイル転送中にリモートサーバー接続が失敗した場合は、ファイルが正しく送信され保存されていることを確認したいので、どうなるかを知りたいです。ファイルの一部だけが「backupPath」に書き込まれますか、それとも「全部または専務」戦略に従いますか?つまり、エラーが発生し、「backupPath」アドレスを持つファイルがリモートホストに作成されません(私に適しています)。より良い)?
ベストアンサー1
プロセスの観点からは、cat
stdinから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
元の投稿からコピーされ、シェル構文ではありません。