私はwgetを使用してWebサイトのコンテンツをダウンロードしていますが、wgetはファイルを1つずつダウンロードします。
4つの同時接続を使用してwgetをダウンロードするにはどうすればよいですか?
aria2を使用します。
aria2c -x 16 [url]
# |
# |
# |
# ----> the number of connections
大好きです !!
Wgetは、ファイルのダウンロードを高速化するための複数のソケット接続をサポートしていません。
私たちは、gmarianの答えよりも少し良くできると思います。
正しい方法は aria2
を使用することです。
aria2c -x 16 -s 16 [url]
# | |
# | |
# | |
# ---------> the number of connections here
GNU parallelはまだ言及されていないため、別の方法を示します。
cat url.list | parallel -j 8 wget -O {#}.html {}
私は(おそらく) 解決策 を見つけました
あるサーバーから次のサーバーに数千のログファイルをダウンロードする過程で、私は突然、BSDで深刻なマルチスレッドダウンロードを行う必要がありました。できれば、Wgetを使用してこれを処理する最も簡単な方法でした。少し見て回ると、この小さなナゲットに導かれました。
wget -r -np -N [url] & wget -r -np -N [url] & wget -r -np -N [url] & wget -r -np -N [url]
必要な数のスレッドに対して
wget -r -np -N [url]
を繰り返すだけです...これはきれいではなく、これを行うためのより良い方法は確かにありますが、迅速で汚れたものが必要な場合は、トリックを行う必要があります...
注:オプション-N
は、wget
が「新しい」ファイルのみをダウンロードするようにします。つまり、タイムスタンプが変更されない限り、ファイルは上書きまたは再ダウンロードされません。サーバ。
Httrackを使用することを強くお勧めします。
例:httrack -v -w http://example.com/
デフォルトでは、8つの同時接続でミラーリングを行います。 Httrackには、プレイする場所がたくさんあります。ご覧ください。
他のポスターが言及したように、aria2をご覧になることをお勧めします。バージョン1.16.1のUbuntuマニュアルページから:
aria2はファイルをダウンロードするためのユーティリティです。サポートされるプロトコルは、HTTP(S)、FTP、BitTorrent、およびMetalinkです。 aria2は、複数のソース/プロトコルからファイルをダウンロードし、最大ダウンロード帯域幅を利用しようとします。 HTTP(S)/ FTPとBitTorrentからのファイルの同時ダウンロードをサポートし、HTTP(S)/ FTPからダウンロードしたデータはBitTorrent swarmにアップロードされます。 Metalinkのチャンクチェックサムを使用して、aria2はBitTorrentのようなファイルをダウンロードしながらデータのチャンクを自動的に検証します。
-x
フラグを使用して、サーバーごとの最大接続数を指定できます(デフォルト:1):
aria2c -x 16 [url]
同じファイルが複数の場所から利用できる場合、それらすべてからダウンロードすることを選択できます。 -j
フラグを使用して、すべての静的URIの並列ダウンロードの最大数を指定します(デフォルト:5)。
aria2c -j 5 [url] [url2]
詳細については http://aria2.sourceforge.net/ をご覧ください。使用方法については、manページに実際の説明があり、下部に使用例のセクションがあります。オンラインバージョンは http://aria2.sourceforge.net/manual/en/html/README.html にあります。
wgetは複数の接続でダウンロードできないため、代わりにaria2のような他のプログラムを使用することができます。
make
は簡単に並列化できます(例:make -j 4
)。たとえば、次はwgetを使用してファイルを並行してダウンロードするために使用している単純なMakefile
です。
BASE=http://www.somewhere.com/path/to
FILES=$(Shell awk '{printf "%s.ext\n", $$1}' filelist.txt)
LOG=download.log
all: $(FILES)
echo $(FILES)
%.ext:
wget -N -a $(LOG) $(BASE)/$@
.PHONY: all
default: all
つかいます
aria2c -x 10 -i websites.txt >/dev/null 2>/dev/null &
websites.txtでは、1行に1つのURLを入力します。例:
https://www.example.com/1.mp4
https://www.example.com/2.mp4
https://www.example.com/3.mp4
https://www.example.com/4.mp4
https://www.example.com/5.mp4
xargs
を使用して、wget
を複数のファイルで並行して動作させる
#!/bin/bash
mywget()
{
wget "$1"
}
export -f mywget
# run wget in parallel using 8 thread/connection
xargs -P 8 -n 1 -I {} bash -c "mywget '{}'" < list_urls.txt
Aria2オプション、20 mb未満のファイルを扱う正しい方法
aria2c -k 2M -x 10 -s 10 [url]
-k 2M
ファイルを2MBのチャンクに分割
-k
または--min-split-size
のデフォルト値は20mbです。このオプションとファイルを20mb未満に設定しない場合、-x
または-s
の値に関係なく、単一の接続でのみ実行されます。