【发布时间】:2013-08-25 16:15:43
【问题描述】:
for i in `cat input`
do
youtube-dl $i &&
done
此处的输入文件包含 YouTube 视频链接列表。我希望这段代码能够并行下载列表中的视频。但是这项工作一个接一个地完成了。是不是代码有问题?
【问题讨论】:
标签: bash video background-process youtube-dl
for i in `cat input`
do
youtube-dl $i &&
done
此处的输入文件包含 YouTube 视频链接列表。我希望这段代码能够并行下载列表中的视频。但是这项工作一个接一个地完成了。是不是代码有问题?
【问题讨论】:
标签: bash video background-process youtube-dl
使用& 符号而不是&& 在后台运行进程。脚本应如下所示:
while read -r i
do
youtube-dl "$i" &
done < "input"
wait ## Optional if you want the script to wait for all videos to download before exiting
【讨论】:
xargs可能会更好
你有一个额外的&,所以:
for i in $(< input); do
youtube-dl "$i" &
done
&& 运算符用于布尔测试,例如:((1 == 1)) && echo "1 == 1" || echo "1 != 1"
$( ) 形式。它更具可读性,并且易于嵌套。【讨论】:
for i in `cat input`; do
youtube-dl "$i" &
done
另外,如果您不想同时下载过多的 youtube 垃圾邮件,您可以使用这个:
cat file.txt | xargs -d '\n' -L 1 -P 5 youtube-dl
此代码将同时下载 5 个视频。我很确定这正是你想要做的。此代码也适用于包含空格的链接。
【讨论】: