wgetを使用して複数のファイルを同時にダウンロードする方法は?

wgetを使用して複数のファイルを同時にダウンロードする方法は?

私はダウンロードする必要があるファイルの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と小さい。しかし、あまりにも多く、wget1つずつダウンロードすると、ダウンロードに数日かかります。 wgetコマンドを使用して同時に複数のファイルをダウンロードできますか?注 - 私の質問は、同じウェブサイトから多くのファイルをダウンロードすることに関する他の質問と重複しません。また、私に提案しないでくださいwget2。インストールに問題があるため、wget2別のソリューションを探しています。

関連があるかもしれませんが、私のインターネット接続速度は約550 MB /秒で、ファイルを1つずつダウンロードすると、ダウンロード速度は150 kB /秒で表示されます。これは比較すると非常に微妙です。したがって、帯域幅の観点からは、一度に多くのファイルをダウンロードするのが合理的です(少なくとも私の考えでは)。

次の潜在的な選択肢の1つを実行する方法を教えてもらえますか?

  • ダウンロードする前にファイルを圧縮してください。 1つの大きなzipファイルがより速くダウンロードされることを願っています。
  • 私がダウンロードしたファイルには.fits3つのテーブルが含まれています。実際、各テーブルの最初のテーブルだけが必要です。したがって、最初のテーブルだけがアクセスしてダウンロードできる場合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がカウントを決定します)。これは{}パイプライン入力ラインです。

おすすめ記事