命令如下:

curl -s $URL |perl -nle "print for m{http://[^\"]+(?:jpg|png|gif)}g;"|sort -u |xargs wget

流程:

  • 将包含图片链接的页面(例如http://www.flickr.com/photos/anyaanja/4165312465/sizes/o/ 下载下来,以便析取图片地址。使用的命令是curl -s $URL。这里的地址需要手动替换为你所需要的地址。curl 的-s选项是表明使用silent模式,避免任何输出。
  • 使用perl解析刚刚下载的页面,找到以http开头,以jpg、png、gif结尾的图片地址。这里的图片类型任意,只要按照类似的语法可以扩展或缩减。perl的-nle选项表示循环读入输入行,搜索相应匹配行,输出相应部分。详细参见perl one liners
  • perl在这里起解析网页的作用。awk应该也有同样的功效,只是个人感觉awk的正则表达式功能太弱较弱。
  • 使用sort -u将生成的url排序。如果有重复项,只保留其一,以免重复下载。
  • 使用wget来下载这些图片到当前目录。由于wget 默认无法接收standard input的输入,因此使用xargs作为中转。

2009120更新:

  • 使用

    curl -s $URL | grep -o "http://.*\?\(png\|jpg\)" |sort -u |xargs wget

    or

    curl -s $URL | grep -E -o "http://.*?(png|jpg)" |sort -u |xargs wget

    能实现同样的作用。其中,-o是表示只显示匹配部分,而不必显示整行文本(默认情况下是显示整行文本);-E 是扩展模式的正则,在此模式下问号、括号、竖线都可直接使用,不必在前边加反斜杠。

  • 使用perl的话,正则表达式部分比较强大,只是命令臃肿;使用grep,灵活小巧,但是有可能无法使用复杂的正则表达式。