diff options
author | kaa <kaa@disroot.org> | 2025-05-08 21:18:45 -0700 |
---|---|---|
committer | kaa <kaa@disroot.org> | 2025-05-08 21:18:45 -0700 |
commit | 924e5b4cd70155e5022dfcc9e38341217da3973d (patch) | |
tree | 19d6fa7e97e7c1b1fabf901b7ab230857f4dbd80 /concurrent_dl.rc |
Initial
Diffstat (limited to 'concurrent_dl.rc')
-rwxr-xr-x | concurrent_dl.rc | 57 |
1 files changed, 57 insertions, 0 deletions
diff --git a/concurrent_dl.rc b/concurrent_dl.rc new file mode 100755 index 0000000..d08a56a --- /dev/null +++ b/concurrent_dl.rc @@ -0,0 +1,57 @@ +fn rand { + dd if=/dev/urandom bs=1 count=2 >[2]/dev/null | base16 | tr 'a-f' '0-9' | sed -e 's|^|.|' +} + +fn dl { + echo $2 + curl --max-time 10 -sLo $1 $2 -H @$3 +} + +#fn index_out { +# sed -e 's|.*&||' -e 's|^|index_d|' +#} +fn strip_path { + sed -e 's|.*/||' +} + +chunk = 10 +# $1 is a function for determining output file names from urls +# $2 is a file with HTTP headers + +fn concurrent_dl { + in=`{cat} + filter = $1 + + if (test -z $filter) { + filter = strip_path + } + + i = 0 + limit = $#in + while (test $i -lt $limit) { + end=`{echo $i + $chunk | bc} + list = `{for (j in `{seq $i $end}) { + echo $in($j) + } + } + + pids = '' + for (url in $list) { + o = `{echo $url | $filter} + + if (! test -f $o) { + dl $o $url $2 & + pids = ($apid $pids) + } + } + + if (test -n $"pids) { + for (pid in $pids) { + echo waiting on $pid + wait $pid + } + } + + i = $end + } +} |