URLのリストをダウンロードする方法としてwget -i
を知っています。唯一の問題は、いくつかの異なるPOSTデータをそれぞれに渡す必要があることです。これは、wget --post-data=
を使用する単一のURLでは機能しますが、リストでは機能しません。
私はどんなCLIダウンローダーでも、あるいはJSやPythonでさえもオープンです。ただし、ダウンロードごとにプログレスバーを表示するか、DLが終了するたびに更新されるログファイルを取得するか、DLが終了するタイミングを知る他の方法があります。
すでにURLのリストがある場合は、POSTデータをそのリストに追加するだけです。
www.example.com postdata1
www.foo.com
www.bar.com second_post_data
次に、-i
を使用する代わりに、bashループでファイルを読み取り、データをwgetに渡します。
while read url post; do wget --post-data="$post" $url; done < list.txt
複数のファイルが同時にダウンロードされるようにそれらを並行して実行するには、&
ではなく;
を使用します。ただし、これにより、URLごとに個別のwget
プロセスが起動されます。
while read url post; do wget --post-data="$post" $url & done < list.txt
このタイプのものを起動するために使用する1つのトリックは、現在実行中の数を追跡し、数値がしきい値(10など)を下回る場合にのみ次の1つを実行することです。
while read url post; do
while [[ "$(pgrep -fc wget)" -gt 9 && $c -gt 10 ]]; do sleep 1; done;
((c++));
echo "Launching $url ($c)";
wget --post-data="$post" $url >/dev/null 2>&1 && echo "$c finsihed" &
done < list.txt
これにより、最初の10個のURLが起動し、1つのURLが終了するのを待って次のURLを起動します。
次の形式のように、区切りファイルCSVを定義できます(例)。
URL1;POSTDATA1
URL2;POSTDATA2
...
awk
コマンドを使用して解析します。
awk -F\; '{print "wget -i "$1" --post-data="$2}' your_CSV_file