複数の同時接続を使用して sftp または http などを介して 1 つの大きなファイルをダウンロードする方法

複数の同時接続を使用して sftp または http などを介して 1 つの大きなファイルをダウンロードする方法

複数の同時接続と複数のネットワーク プロトコル (ftp、http など) の両方をサポートするコマンド ライン ツールはありますか?

実際の例は以下になります。

SSH サーバー上に大きなバックアップ ファイルがあり、これを現在のマシンに転送したいと考えています。ファイルのダウンロードに時間がかかりすぎるため、複数の同時ネットワーク接続を使用して速度を上げたいと考えています。SSH サーバーの負荷が高くないことを前提としています。

ダウンロード複数のファイル/URL同時接続を使用している関係ありませんこの質問に対して。

これを解決するためにコードを記述する必要はありません。

答え1

lftpプログラムは複数のネットワーク プロトコルと同時接続の両方を処理できます。

プロトコルのサポート:

Lftp は次のプロトコルをサポートしています。

  • FTP
  • sftp
  • http と https
  • ビットトレント

ftps などに関する詳細情報ここ

並行ダウンロード:

2 つの同時接続を使用して にある 1 つの大きなファイルをダウンロードするには<URI>:

lftp -c "pget -c -n 2 <URI>"

最初の-cオプションは、実行するコマンドを指定します。 pget複数の並列接続を使用してファイル転送を確立します。2 番目の-cオプションは、この転送が以前に中断された場合に転送を続行することを意味します。この-nオプションは、使用する接続の最大数を制限します。

コマンドとオプションの詳細については、オンラインのマニュアルページ

警告:これにより転送速度は向上しますが、ネットワークとサーバーに大きな負荷がかかります。速度の向上はネットワークとサーバーの状態に依存します。

質問の実際の例に対応するには、次のようになります。

lftp -c "pget -c -n 2 sftp://[email protected]/~/backups/large.tar.gz"

この例では、2 つの同時接続を使用して、ssh (sftp) 経由で大きなバックアップ ファイルをダウンロードします。パスワードなしの ssh ログインが設定されていることを前提としています。

注: Lftp は、他の ftp コマンドと同様に、対話モードでも使用できます。

答え2

aria2複数の接続と FTP、HTTP、SFTP (その他) をサポートします。

例えば:

aria2c -j ${num_concurrent} "${uri}"

複数のネットワーク同時接続を使用して速度を上げたい

サーバーが個々の接続を調整するように構成されていない限り、複数の並列ダウンロードを実行してもメリットが得られない可能性があります。実際、スループットに悪影響を与える可能性があります。

標準的なツール(例:rsync、、scp)を使用するとcurl通常あなたが求めているものを提供します。

接続の切断や部分的な転送が問題になる場合は、このようなユーティリティが役立ちますが、これrsync --partialも役立つことに注意してください。

関連情報