部分的にコピーされたファイルでscpを再開する方法は?[閉まっている]


97

scpシェルコマンドを使用して、ファイルの巨大なフォルダーをコピーします。

しかし、ある時点で、実行中のコマンドを(Ctrl + Cまたはkillで)killする必要がありました。

scpはファイルを順番にコピーするので、部分的にコピーされたファイルは1つだけになるはずです。

同じscpコマンドを再開して、正常にコピーされたファイルを上書きせず、部分的にコピーされたファイルを適切に処理するにはどうすればよいですか?

PS私はこの種のものをrsyncで実行できることを知っていますが、何らかの理由でscpの方が高速なので、代わりにそれを使用します。


4
rsyncは転送を再開できるようにするために余分な時間を費やすので、遅いと思います。rsyncを使用して部分転送を完了することを検討してください。
キース・トンプソン

2
あなたは賢いになりたい場合は、いつでも試すことができdd、適切でskip変数、およびパイプにssh:)
マーク・Nunberg

1
これはSOのトピックから外れています。それはSuperUserに属し、確かにそこで尋ねられました
Dan Dascalescu

回答:


183

あなたは使用する必要がありますrsync以上ssh

rsync -P -e ssh remoteuser@remotehost:/remote/path /local/path

重要なオプションはです-P。これは--partial --progress

-a(アーカイブモード用)や-z(圧縮を有効にするため)などの他のオプションも使用できます。

マニュアル:https : //download.samba.org/pub/rsync/rsync.html


43
rsyncがscpで開始されたバッチコピーを正常に再開することに注意してください。
クレイグアンダーソン

6
「スキップディレクトリ」が表示されます。も指定しない限り、エラー-r。出典:lucasb.eyer.be/snips/rsync-skipping-directory.html
Artur Czajka

4
私のために働いたが、私は--appendも追加した... rsync -P --append -e ssh remoteuser @ remotehost:/ remote / path / local / path
cnd

1
省略されている重要なポイントである@CraigAnderson。答えは、ダウンロードが最初にrsyncで開始されている必要があることを示唆しているようです。
Willa

1
回答で与えられたオプションは私にとってはうまくrsync -P -rsh remoteuser@remotehost:/remote/path /local/path
バニーウサギ

26

rsyncの代替:

sftpオプション-r(ディレクトリ全体を再帰的にコピーする)とのコマンドのオプション-aを使用して、既存のファイルの部分的な転送を再開します。sftpget

前提条件:あなたのsftp実装は、既に持っているget-aオプション。

例:

/foo/barリモートサーバーからローカルの現在のディレクトリにディレクトリをコピーします。ディレクトリbarは、ローカルの現在のディレクトリに作成されます。

echo "get -a /foo/bar" | sftp -r server

4
私のサーバーではsshへのログインが許可されていないため、rsyncが機能しないため、ソリューションは素晴らしいです。:私は私のコマンドであるので、ここからダウンロードするのではなく、アップロードするために必要なecho "put -a foo/bar" | sftp -r server:/foo
カルロス・ラファエル・ラミレス

1
rsyncは(デフォルト以外のポートでは)sshフレンドリーではないため、これは部分的にダウンロードされたファイルを再開するための実行可能なオプションのようです。
codezombie 2018


6

別の可能性は、ストールしたときにすでに開始しているscpをサルベージすることです。

バックグラウンドでctrl + zして停止し、受信サーバーにSSHでログインしてログインし、終了します。scpプロセスをfgして、「停止」から再開するのを見てください!


Mac OS Xで私のために働いた。これを投稿してくれてありがとう、今日は私のベーコンを救った!
ベンヒッチコック

1

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

1

-rshとの-Pオプションを利用できますrsync-P部分的なダウンロード用であり、-rsh転送がssh procotol経由であることを示します。

完全なコマンドは次のようになります。 rsync -P -rsh remoteuser@remotehost:/remote/path /local/path


-5

昨日同じ問題が発生し、scp経由で巨大なSQLダンプを転送しました。 wget --continue the_url

そのブログ投稿はそれをかなりよく説明してい ますhttp://www.cyberciti.biz/tips/wget-resume-broken-download.html


サイトがダウンした場合に備えて、関連する部分をURLから回答にコピーすることをお勧めします。
Ryre 2017

アップロードしようとしているので、wgetはありません。
ロルフ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.