gpt4 book ai didi

linux - fork wget 具有控制特定下载的能力

转载 作者:太空宇宙 更新时间:2023-11-04 12:28:04 25 4
gpt4 key购买 nike

我正在编写一个 bash 脚本,又名下载管理器。 兴趣点是让这条简单的线更高级:

for link in ${links}; do
wget -q --show-progress ${link}
done
  1. 如何 fork 所有下载并为脚本用户提供一种友好的方式来终止一个特定的下载在所有下载开始之后?

    <
  2. wget -bqc 是否并行运行?

  3. 有什么东西可以代替 --show-progress 来为脚本用户提供显示特定下载的当前状态的能力吗?

最佳答案

所以思路是:

 #declare associative array  [download_url]=pid_of_download      
declare -A downloads
#declare array of killed downloads
declare -a killedDownloads=()

function download() {
local url=$1
# killed downloads can be reloaded, but not successfully downloaded URL's
if [ ${downloads[${url}]} ] && [[ ! ${killedDownloads[*]} =~ ${do wnloads[${url}]} ]]; then
echo "Already download-[ing/ed] !"
else
wget -q ${url} &
downloads[${url}]=$!
fi
}

$!包含最近执行的后台命令的进程ID,显然是刚刚执行的wget命令的PID

当用户想要终止某些下载时,我们打印所有下载数组。在打印时,我们还可以显示从

获取的状态作为子字符串
 jobs -l | grep ${downloads[$i])

...并使用 killedDownloads 了解哪些 URL 实际上已被杀死,但未完成。

 if [[ ${killedDownloads[*]} =~ ${downloads[$i]} ]]
//set status var to killed

自杀:

 function stop(){
local pid=$1

if ps -p ${pid} > /dev/null; then
kill -9 ${pid}
wait ${pid} 2>/dev/null
echo "Killed downloading of ${pid}"
killedDownloads+=${pid}
else
echo "No active download with id = ${pid} exists"
fi
}

当然,您需要将它放在一些交互式循环中,添加对无效 url 的检查等。

关于linux - fork wget 具有控制特定下载的能力,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44073730/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com