1
for i in `cat input`
    do
    youtube-dl $i &&
done

这里的输入文件包含 YouTube 视频链接列表。我希望这段代码能够并行下载列表中的视频。但是这项工作一个接一个地完成了。是不是代码有问题?

4

3 回答 3

1

你有一个额外的&,所以:

for i in $(< input); do
    youtube-dl "$i" &
done

走得更远

  • &&运算符用于布尔测试,例如:((1 == 1)) && echo "1 == 1" || echo "1 != 1"
  • 始终用双引号保护您的变量,以防止bash 分词
  • 反引号在 2013 年被弃用,取而代之的是这种$( )形式。它更具可读性,并且易于嵌套。
于 2013-08-25T16:19:21.997 回答
1

使用&符号而不是&&在后台运行进程。脚本应如下所示:

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
于 2013-08-25T16:19:26.487 回答
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 个视频。我很确定这正是你想要做的。此代码也适用于包含空格的链接。

于 2013-08-25T16:19:40.300 回答