web-dev-qa-db-ja.com

wgetを高速化またはマルチスレッド化する方法は?

コンピューターハードウェア(cpu +マザーボード+グラフィックカード+メモリ+ハードディスク)をアップグレードしたばかりなので、新しいOSをインストールする必要があります。 wgetコマンドでdebian-6.0.6-AMD64-netinst.isoをダウンロードしようとしましたが、速度が遅いため耐えられませんでした。 4Kb/s ~ 17 Kb/s、実行中のカメのように遅い、またはChromeを使用している場合はさらに遅くなります。

wgetのヘルプ情報を読みましたが、より高速にするオプションがないようです。

とにかくwgetを高速化する方法はありますか?または、マルチスレッドをダウンロードすることは可能ですか?

PS:私の帯域幅は4Mです。私はこのコマンドを使用します:

wget -c url  http://hammurabi.acc.umu.se/debian-cd/6.0.6/AMD64/iso-cd/debian-6.0.6-AMD64-netinst.iso
37
Teifi

axelを試してみませんか?本格的なコマンドラインベースのダウンローダーです。
axelをインストールし、axel -a -n [Num_of_Thread] link1 link2 link3 ...でダウンロードを開始します。ここで、'[Num_of_Thread]'は、ダウンロードする各リンクに対して作成する並列接続の数です。

-aは、改善された進行状況バーを表示するだけです。

52
Gufran

Gufranの推奨に基づいてaxelを試しましたが、非常に失望しました。私の目標は、DownThemAllのCLIの置き換えを見つけることでした。これは、8コアのMac ProでもCPUとハードディスクを占有し、システム全体の速度を低下させるためです。また、wgetcurlのマルチスレッド置換が必要でした。これらの複数のインスタンスを実行するスクリプトの多少の不手際ではありません。それで、私はさらに検索し、私が現時点で究極の最新のマルチスレッドCLIダウンローダーだと思うものを見つけました-- aria2axelで私が抱えていた大きな問題は、SSLを介してファイルをダウンロードする「偽造」でした。私はtcdumpでそれをしているのを見つけました。 httpsリンクを通常のhttpとしてダウンロードしていました。それは本当に私を怒らせ、もし私がチェックしなければ、私は誤った安心感を持っていただろう。この深刻なセキュリティ侵害について多くの人が知っているとは思えません。 aria2に戻ると、他のどのダウンローダーよりも高度です。 HTTP(S)、FTP、BitTorrent、およびMetalinkプロトコルをサポートし、マルチプラットフォームであり、ダウンロードゲリラです。 DTAとは異なり、CPUまたはハードディスクに負荷をかけることなく、ISPの帯域幅を最大限に活用します。マニュアルページは巨大です。その多くのオプションのうちのいくつかを使用することはありません。ああ、ところで、私はtcdumpでSSLのパフォーマンスを確認しましたが、偽物ではなく堅実です。 DTAの動作を模倣するスクリプトを作成しましたが、便利ではありません。

最大帯域幅を取得するために使用する基本的なコマンドは

aria2c --file-allocation=none -c -x 10 -s 10 -d "mydir" URL

-cは、中断された場合にダウンロードの継続を許可し、-x 10および-s 10はサーバーごとに最大10接続を許可し、-d "mydir"はファイルをディレクトリmydirに出力します。

aria2files.sh

#!/bin/bash

filename="$1" # get filename from command line argument

while read -r line
do
    if [ "$line" ] # skip blank lines
    then
        if [[ "$line" =~ (https?|ftp)\:\/\/ ]] # line contains a URL, download file
        then
            echo "URL: '$line'"
            aria2c --file-allocation=none -c -x 10 -s 10 -d "$currdir" "$line"
        else # line contains a directory name, create directory if not already present
            echo "Directory: '$line'"
            currdir="$line"
            if [ ! -d "$currdir" ]
            then
                mkdir -p "$currdir" # '-p' enables creation of nested directories in one command
            fi
        fi
    fi
done < "$filename"

次の形式のテキストファイルを読み取ります。

files.txt

dierctory 1
url1
url2
…
directory 2/subdirectory/sub-subdirectory/…
url3
url4
…
…
…

スクリプトはコマンドラインからファイル名を読み取ります。

aria2files.sh files.txt

ディレクトリを作成し、それらにダウンロードします。 2番目の例に示すように、ネストされたディレクトリを作成できます。

詳細については、私の投稿を参照してください RLからファイルをテキストファイルにリストされた指定ディレクトリにダウンロードするためのBashスクリプト .

51
hmj6jmh