我需要从另一个文件中列出的每个域下载文件列表。我尝试了很多次,但我仍然失败了。
要下载的示例列表文件(例如,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
答案 0 :(得分:0)
你在这里发生了一些事情。首先,读取变量不是创建数组。你得到的字符串将受到单词拆分和通配等的影响。其次,您需要单独执行两个文件循环,而不是尝试在单个命令中执行此操作。
要修复第一部分,我建议使用readarray
或mapfile
,对于第二部分,使用嵌套循环,如:
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