我想在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}
,所有数字都相同?
答案 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
从该文件中提取网址的选项。