Scp Shellコマンドを使用して、ファイルの巨大なフォルダーをコピーします。
しかし、ある時点で、実行中のコマンドを(Ctrl + Cまたはkillで)強制終了する必要がありました。
私の理解では、scpはファイルを順番にコピーするので、部分的にコピーされたファイルは1つだけです。
正常にコピーされたファイルを上書きせず、部分的にコピーされたファイルを適切に処理するために、同じscpコマンドを再開するにはどうすればよいですか?
追伸この種のことをrsyncで行えることは知っていますが、何らかの理由でscpの方が高速であり、代わりにそれを使用します。
rsync
よりもssh
を使用する必要があります
rsync -P -e ssh remoteuser@remotehost:/remote/path /local/path
キーオプションは-P
です。これは--partial --progress
と同じです
-a
(アーカイブモード用)や-z
(圧縮を有効にするため)などの他のオプションも使用できます。
Rsyncの代替:
sftp
をオプション-r
(ディレクトリ全体を再帰的にコピー)およびsftp
のget
コマンドのオプション-a
を使用して、既存のファイルの部分的な転送を再開します。
前提条件:sftp
実装には、-a
オプション付きのget
が既にあります。
例:
ディレクトリ/foo/bar
をリモートサーバーからローカルの現在のディレクトリにコピーします。ディレクトリbar
はローカルの現在のディレクトリに作成されます。
echo "get -a /foo/bar" | sftp -r server
OpenSSH 6.3以降では、reget
で sftp
command を使用できます。
get
と同じ構文ですが、既存のローカルファイルの最後から転送を開始する点が異なります。
別の可能性は、失速したときにすでに開始したscpを救おうとすることです。
ctrl + zをバックグラウンドにして停止し、受信サーバーにsshでログインしてログインし、終了します。さて、scpプロセスをfgし、「停止」から再開するのを見てください!
最初に正常に動作していた数秒後にrsyncが停止する場合、次のブルートフォースソリューションになりました。
cat run_me.sh
#!/bin/bash
while [ 1 ]
do
rsync --partial --progress --rsh=ssh user@Host:/path/file.tgz file.tgz &
TASK_PID=$!
sleep 60
kill $TASK_PID
sleep 2
done
rsync
の-rsh
および-P
オプションを使用できます。 -P
は部分的なダウンロード用で、-rsh
は転送がssh procotol経由であることを示します。
完全なコマンドは次のようになります:rsync -P -rsh remoteuser@remotehost:/remote/path /local/path