使用wget将完整URL用作保存的文件名

Mil*_*ato 2 terminal wget

我在终端中使用wget下载大量图像。

例如 $ wget -i images.txt

我在images.txt文件中拥有所有图像URL。

但是,图片网址往往像 example.com/unqiueNumber/images/main_250.jpg

这意味着所有图像都命名为 main_250.jpg

我真正需要的是将图像与每个图像的整个URL保存在一起,以便“唯一编号”是文件名的一部分。

有什么建议么?

小智 5

假定图像的URL位于名为images.txt的文本文件中,每行一个URL,您可以运行
cat images.txt | sed 'p;s/\//-/g' | sed 'N;s/\n/ -O /' | xargs wget
以下载每个具有由URL组成的文件名的图像。

现在进行解释:

在此示例中,我将使用

https://www.newton.ac.uk/files/covers/968361.jpg https://www.moooi.com/sites/default/files/styles/large/public/product-images/random_detail.jpg?itok=ErJveZTY

images.txt(您可以在文件中添加任意数量的图像,只要它们具有相同的格式即可)。

  • cat images.txt 将文件内容通过管道传输到标准输出
  • sed 'p;s/\//-/g' 将文件打印到stdout并在其中一行显示url,然后在下一行显示预期的文件名,如下所示:

    https://www.newton.ac.uk/files/covers/968361.jpg https:--www.newton.ac.uk-files-covers-968361.jpg https://www.moooi.com/sites/default/files/styles/large/public/product-images/random_detail.jpg?itok=ErJveZTY https:--www.moooi.com-sites-default-files-styles-large-public-product-images-random_detail.jpg?itok=ErJveZTY
  • sed 'N;s/\n/ -O /' 将每张图片的两行(URL和预期的文件名)合并为一行,并在两者之间添加-O选项(这是wget知道第二个参数是预期的文件名),该部分的结果看起来像这个:

    https://www.newton.ac.uk/files/covers/968361.jpg -O https:--www.newton.ac.uk-files-covers-968361.jpg https://www.moooi.com/sites/default/files/styles/large/public/product-images/random_detail.jpg?itok=ErJveZTY -O https:--www.moooi.com-sites-default-files-styles-large-public-product-images-random_detail.jpg?itok=ErJveZTY
  • 并最终xargs wget为每行运行wget作为选项,此示例的最终结果是当前目录中分别名为https:--www.newton.ac.uk-files-covers-968361.jpg和的两个图像https:--www.moooi.com-sites-default-files-styles-large-public-product-images-random_detail.jpg?itok=ErJveZTY