Wget下载多个域和文件

时间:2017-06-03 17:25:45

标签: python bash wget

我需要从另一个文件中列出的每个域下载文件列表。我尝试了很多次,但我仍然失败了。

要下载的示例列表文件(例如,file.txt):

1.jpg
2.jpg
3.jpeg
4.bmp
5.gif

域的示例列表(例如,url.lst):

google.com
google.co.in
google.com.br

剧本:

#!/bin/bash
# Create an array files that contains list of filenames

urls=`cat "url.lst"`
files=`cat "file.txt"`

   for ((file in "${files[@]}" && url in "${urls[@]}"));   do 
        wget "${url}${file}"
   done

我想得到它所以它生成并运行以下命令:

wget google.com/1.jpg
wget google.com/2.jpg
wget google.com/3.jpeg
wget google.com/4.bmp
wget google.com/5.gif
wget google.co.in/1.jpg
wget google.co.in/2.jpg
wget google.co.in/3.jpeg
wget google.co.in/4.bmp
wget google.co.in/5.gif
wget google.com.br/1.jpg
wget google.com.br/2.jpg
wget google.com.br/3.jpeg
wget google.com.br/4.bmp
wget google.com.br/5.gif

1 个答案:

答案 0 :(得分:0)

你在这里发生了一些事情。首先,读取变量不是创建数组。你得到的字符串将受到单词拆分和通配等的影响。其次,您需要单独执行两个文件循环,而不是尝试在单个命令中执行此操作。

要修复第一部分,我建议使用readarraymapfile,对于第二部分,使用嵌套循环,如:

readarray -t urls < url.lst
readarray -t files < file.txt

for dom in "${urls[@]}"; do
    for path in "${files[@]}"; do
        wget "$dom/$path"
    done
done

或者您可以使用for循环替换外部while循环,并跳过其中一个readarray

readarray -t files < file.txt

while read -r url; do
    for path in "${files[@]}"; do
        wget "$url/$path"
    done
done < url.lst