wget循环,其中URL中的数字保持不变

时间:2017-06-26 13:24:57

标签: bash macos pdf terminal wget

我想在Mac上用wget(版本3.2.57(1)-release)下载一堆带有bash的PDF。 PDF代表旧报纸的文章,几乎每天都在1810年至1816年间出版。

我尝试了以下命令:

for i in {10..16}; do wget -A pdf -nc -E -nd —no-check-certificate http://digital.slub-dresden.de/fileadmin/data/453041671-18$i0{1..9}0{1..9}/453041671-18$i0{1..9}0{1..9}_tif/jpegs/453041671-18$i0{1..9}0{1..9}.pdf http://digital.slub-dresden.de/fileadmin/data/453041671-18$i{10..12}{10..31}/453041671-18$i{10..12}{10..31}_tif/jpegs/453041671-18$i{10..12}{10..31}.pdf; done 

不幸的是,URL包含了我需要迭代的几个数字,这使得参数列表变得巨大,直到它最终超过最大限制,例如:克。

  

453041671-18 $ I0 {1..9 {0 1..9} / 453041671-18 $ I 0 {1..9 {0} 1..9 _tif / JPEG文件/ 453041671-18 $ I 0 { 1..9 {0} 1..9 .PDF

我收到argument list too long错误消息。

如果您将上述链接代码段作为示例,则唯一的现有链接是:

  

453041671-18000701 / 453041671-18000701_tif / JPEG文件/ 453041671-18000701.pdf

其中所有月份都具有相同的数字(1800 07 01),与此示例不同:

  

453041671-18000的 8 01 / 453041671-18000的 7 01_tif / JPEG文件/ 453041671-18000的 7 01.pdf

或任何其他组合wget正在尝试。

如何分别在wget{1..9}的每次迭代中设置{10..12},所有数字都相同?

1 个答案:

答案 0 :(得分:2)

Brace扩展不知道其他支撑扩展。你不能有多个大括号扩展并让它们串联变化。相反,您必须使用for循环。

for year in {10..16}; do
  for month in `seq -w 1 12`; do
    for day in `seq -w 1 31`; do
      wget ... 453041671-18$year$month$day/453041671-18$year$month${day}_tif/jpegs/453041671-18$year$month$day.pdf
      # The second day is in braces because otherwise it would parse as $day_tif.
    done
  done
done

如果您想减少衍生wgets的数量,可以将wget替换为echo ... >> listing,然后使用--input-file-i)获取wget从该文件中提取网址的选项。