wgetを使用して複数のファイルを並列にダウンロード

wgetを使用して複数のファイルを並列にダウンロード

次のbashスクリプトがあります。

for i in {0800..9999}; do
    for j in {001..032}; do
        wget http://example.com/"$i-$j".jpg
    done
done

すべての写真がそこにあり、実際には各反復は他の反復に依存しません。スレッド数を並列化して制御する方法は何ですか?

ベストアンサー1

Confiqの答えは小さなi合計に対してうまく機能しますj。ただし、質問のi合計サイズを考慮すると、j生成されるプロセスの総数を制限できます。parallelコマンドまたはいくつかのバージョンを使用できますxargs。たとえば、-Pこのフラグをサポートするxargsを使用すると、次のように内部ループを並列化できます。

for i in {0800..9999}; do
  echo {001..032} | xargs -n 1 -P 8 -I{} wget http://example.com/"$i-{}".jpg
done

GNUパラレルより複雑な動作が必要な場合は多数の機能が提供され、次の2つのパラメータを使用して簡単に並列化できます。

parallel -a <(seq 0800 9999) -a <(seq 001 032) -P 8 wget http://example.com/{1}-{2}.jpg

おすすめ記事