我有一个 JPG url 扩展的 csv。
http://www.example.com/images/[url_extension]
我想使用curl 循环遍历CSV 并在每个扩展名下载jpg。到目前为止,我有以下内容,但我在语法上遇到了困难。任何帮助是极大的赞赏。
#!/bin/bash
file=urlextensions.csv
while read line
do
outfile=$(echo $line | awk 'BEGIN { FS = "/" } ; {print $NF}')
curl -o "$http://www.example.com/images/" "$line"
done < "$/Users/Me/Documents/urlextensions.csv"
答案1
您的代码中有几个错误:
- 您在第 2 行中定义
file
,但随后不在循环中使用它。 - 放在
$
事物前面将使 shell 尝试替换它,这可能不是您在执行$http
或时想要的$/Users
。 - 您在循环中定义
outfile
,但不使用它。也许你想把它放在-o
你的卷曲线上。 - curl 的参数
-o
应该是文件名,但您将 URL 放在那里。 - 基本 URL (
http://www.example.com/images
) 和您添加到其中的部分需要位于同一参数中,而不是用空格分隔,否则会使 shell 认为它需要两个参数。
所以我最终得到:
#!/bin/bash
filename=./extensions.txt
while read line || [[ -n "$line" ]]; do
echo downloading $line
curl -o $line "http://example.com/$line"
done < "$filename"
如果将其放入文件名中read_examp
并使其可执行,您可以看到它的工作方式如下:
chicks$ cat extensions.txt
foo
bar
baz
chicks$ ./read_examp
foo
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 1270 100 1270 0 0 41794 0 --:--:-- --:--:-- --:--:-- 42333
bar
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 1270 100 1270 0 0 53987 0 --:--:-- --:--:-- --:--:-- 55217
baz
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 1270 100 1270 0 0 48366 0 --:--:-- --:--:-- --:--:-- 48846
chicks$ ls -l `cat extensions.txt`
-rw-r--r-- 1 chicks staff 1270 Oct 7 10:01 bar
-rw-r--r-- 1 chicks staff 1270 Oct 7 10:01 baz
-rw-r--r-- 1 chicks staff 1270 Oct 7 10:01 foo
注意:您提到了 CSV,但您的示例代码似乎根本没有处理这个问题。你可以用一些东西来扩展它像这样从 CSV 中提取一个字段,而不是使用整行。