bash:来自文件的cURL,如果存在重复,则增加文件名

时间:2016-07-01 18:32:19

标签: bash curl

我正在尝试卷曲一个URL列表,以便从一组7000多个URL中聚合它们的表格数据。 URL位于.txt文件中。我的目标是cURL每一行并将它们保存到本地文件夹,然后我将grep并解析HTML表。

不幸的是,由于文件中URL的格式,存在重复项(example.com/State/City.html。当我运行一个短暂的循环时,我收回的文件少于5500,所以至少有列表中有1500个dupes。因此,我尝试grep URL的“/State/City.html”部分并将其传输到sed以删除/并替换连字符以与curl -O一起使用.cURL正在尝试抓住

以下是我尝试过的示例:

while read line
do
    FILENAME=$(grep -o -E '\/[A-z]+\/[A-z]+\.htm' | sed 's/^\///' | sed 's/\//-/')
    curl $line -o '$FILENAME'
done < source-url-file.txt

感觉我错过了一些相当简单的事情。我已经扫描了这个手册页,因为我担心我混淆了-o和-O,而我过去经常这么做。

当我在终端中运行循环时,输出为:

警告:无法创建文件State-City.htm

2 个答案:

答案 0 :(得分:0)

首先:您没有将网址信息传递给grep。

第二:尝试这一行:

 FILENAME=$(echo $line | egrep -o '\/[^\/]+\/[^\/]+\.html' | sed 's/^\///' | sed 's/\//-/')

答案 1 :(得分:0)

我认为你不需要多个seds和grep,只需1 sed就足够了

urls=$(echo -e 'example.com/s1/c1.html\nexample.com/s1/c2.html\nexample.com/s1/c1.html')

for u in $urls
do
  FN=$(echo "$u" | sed -E 's/^(.*)\/([^\/]+)\/([^\/]+)$/\2-\3/')
  if [[ ! -f "$FN" ]]
  then
    touch "$FN"
    echo "$FN"
  fi
done

此脚本应该可以正常工作,并且还可以将相同的文件下载到多个文件中。

只需用touch一个

替换curl命令