私はダウンロードする必要があるファイルのURLを含むcsvファイルから約330,000の科学ファイルをダウンロードするためにwgetを使用しています。だから私はコマンドを使用しています
wget -i all_the_urls.csv
私のファイルall_the_urls.csvは次のようになります
http://dr16.sdss.org/sas/dr16/sdss/spectro/redux/v5_13_0/spectra/lite/11040/spec-11040-58456-0109.fits
http://dr16.sdss.org/sas/dr16/sdss/spectro/redux/v5_13_0/spectra/lite/11068/spec-11068-58488-0780.fits
http://dr16.sdss.org/sas/dr16/sdss/spectro/redux/v5_13_0/spectra/lite/11068/spec-11068-58488-0240.fits
...
ファイルはそれぞれ約250kBと小さい。しかし、あまりにも多く、wget
1つずつダウンロードすると、ダウンロードに数日かかります。 wgetコマンドを使用して同時に複数のファイルをダウンロードできますか?注 - 私の質問は、同じウェブサイトから多くのファイルをダウンロードすることに関する他の質問と重複しません。また、私に提案しないでくださいwget2
。インストールに問題があるため、wget2
別のソリューションを探しています。
関連があるかもしれませんが、私のインターネット接続速度は約550 MB /秒で、ファイルを1つずつダウンロードすると、ダウンロード速度は150 kB /秒で表示されます。これは比較すると非常に微妙です。したがって、帯域幅の観点からは、一度に多くのファイルをダウンロードするのが合理的です(少なくとも私の考えでは)。
次の潜在的な選択肢の1つを実行する方法を教えてもらえますか?
- ダウンロードする前にファイルを圧縮してください。 1つの大きなzipファイルがより速くダウンロードされることを願っています。
- 私がダウンロードしたファイルには
.fits
3つのテーブルが含まれています。実際、各テーブルの最初のテーブルだけが必要です。したがって、最初のテーブルだけがアクセスしてダウンロードできる場合wget
(可能であれば、最初のテーブルを1つの大きなファイル/テーブルに追加することをお勧めします)、時間も節約できます。
提案やアイデアがあれば教えてください。
ベストアンサー1
あなたはそれを使用することができますparallel
。ほとんどのLinuxディストリビューションで利用可能です。
-jN
これは、N個の並列プログラムが実行されるという意味です。類似またはそれ以上に調整できます-j8
。
cat url-list | parallel -j8 wget {}
または代替的に
cat url-list | parallel -j8 wget ' ' {}
cat
ダウンロードするURLを含むファイルを読み込んでいます。私のファイルは次のとおりです。
https://XXX/all/Packages/a/abrt-2.10.9-20.el8.x86_64.rpm
https://XXX/all/Packages/a/abrt-addon-vmcore-2.10.9-20.el8.x86_64.rpm
...
その後、出力は複数のwget回転を担当する並列ハンドラにパイプされます(-jNがカウントを決定します)。これは{}
パイプライン入力ラインです。