wget:以 .jpg 扩展名保存
wget: save with .jpg extension
我制作了这个脚本来从数据库下载 .jpg 文件:
for (( i = 1; i <= 9; i +=1))
do
wget http://archives.cg66.fr/mdr/index.php/docnumserv/getSubImage/0/0/0/-archives-009NUM_Etat_civil-Images---LLUPIA-2E1700_1702-FRAD066_2E1700_1702_000$i.jpg/0/100/0/100/100/100/100/100/2300/1500/0/100
done
因为.jpg 扩展名后面有“/0/100/0/100/100...”,所以结果是:
9 个文件名为:
100 , 100.1, 100.2, 100.3 ... 100.9
我会想办法将 9 个 .jpg 文件命名为 0001.jpg、0002.jpg、0003.jpg ... 0009.jpg
你能给我一些帮助或建议吗?
你可以这样试试:
~$ URL1="http://archives.cg66.fr/mdr/index.php/docnumserv/getSubImage/0/0/0/-archives-009NUM_Etat_civil-Images---LLUPIA-2E1700_1702-FRAD066_2E1700_1702"
~$ URL2="0/100/0/100/100/100/100/100/2300/1500/0/100"
~$ for I in $(seq -w 0001 0009)
do
wget -O "${I}.jpg" "${URL1}_${I}.jpg/${URL2}"
done
为了用三个前导零填充 i
变量,我使用 seq -w 0001 0009
。要下载具有正确文件名的图像,我使用 wget -O "${i}.jpg" ${URL}
。这项工作也适用于 9 张以上的图像,例如。生成从 1 到 999 的数字序列,前导零 (0001 ... 0099 ... 0999
) 命令变为 seq -w 0001 0999
.
请参阅 man seq
和 man wget
文档(在线 here and here)。
当然URL不能在变量${i}
和下划线之间包含前导零,否则wget
命令将return一个错误页面。
因此我将 URL 从 ..._1702_000$i.jpg/0/100/...
更改为 ..._1702_${i}.jpg/0/100/...
.
下载的文件:
~$ ls -l
total 20404
-rw-r--r-- 1 ale ale 2408227 Oct 9 22:38 0001.jpg
-rw-r--r-- 1 ale ale 2422199 Oct 9 22:38 0002.jpg
-rw-r--r-- 1 ale ale 2330667 Oct 9 22:38 0003.jpg
-rw-r--r-- 1 ale ale 2162542 Oct 9 22:38 0004.jpg
-rw-r--r-- 1 ale ale 2579155 Oct 9 22:38 0005.jpg
-rw-r--r-- 1 ale ale 2175118 Oct 9 22:38 0006.jpg
-rw-r--r-- 1 ale ale 2174325 Oct 9 22:38 0007.jpg
-rw-r--r-- 1 ale ale 2421311 Oct 9 22:38 0008.jpg
-rw-r--r-- 1 ale ale 2202587 Oct 9 22:38 0009.jpg
编辑:另一种选择。首先,我创建一个包含列表 URL:
的文件
~$ URL1="http://archives.cg66.fr/mdr/index.php/docnumserv/getSubImage/0/0/0/-archives-009NUM_Etat_civil-Images---LLUPIA-2E1700_1702-FRAD066_2E1700_1702"
~$ URL2="0/100/0/100/100/100/100/100/2300/1500/0/100"
~$ for I in $(seq -w 0001 0009)
do
echo "${URL1}_{${I}}.jpg/${URL2}" >> url_list.txt
done
循环输出 URLs 格式如下:..._1702_{${I}}.jpg/0/100...
以便保存格式为:'#1.jpg'
.
的文件
~$ xargs -P 10 -n 1 curl -o '#1.jpg' < url_list.txt
但是,此解决方案可能会使网络服务器过载。如果出现问题,我认为使用 wget
解决方案添加选项 --limit-rate=amount
将下载速度限制为每秒 amount
字节可能会有所帮助。添加 k
表示千字节,M
表示兆字节。
参考文献:
- 命令并行化并从文件中获取一个参数 (
xargs -n 1 -P {number_files}
):https://serverfault.com/a/722874
- 使用自定义名称保存文件 (
curl -o '#1.jpg'
):https://unix.stackexchange.com/a/91574
我制作了这个脚本来从数据库下载 .jpg 文件:
for (( i = 1; i <= 9; i +=1))
do
wget http://archives.cg66.fr/mdr/index.php/docnumserv/getSubImage/0/0/0/-archives-009NUM_Etat_civil-Images---LLUPIA-2E1700_1702-FRAD066_2E1700_1702_000$i.jpg/0/100/0/100/100/100/100/100/2300/1500/0/100
done
因为.jpg 扩展名后面有“/0/100/0/100/100...”,所以结果是:
9 个文件名为: 100 , 100.1, 100.2, 100.3 ... 100.9
我会想办法将 9 个 .jpg 文件命名为 0001.jpg、0002.jpg、0003.jpg ... 0009.jpg
你能给我一些帮助或建议吗?
你可以这样试试:
~$ URL1="http://archives.cg66.fr/mdr/index.php/docnumserv/getSubImage/0/0/0/-archives-009NUM_Etat_civil-Images---LLUPIA-2E1700_1702-FRAD066_2E1700_1702"
~$ URL2="0/100/0/100/100/100/100/100/2300/1500/0/100"
~$ for I in $(seq -w 0001 0009)
do
wget -O "${I}.jpg" "${URL1}_${I}.jpg/${URL2}"
done
为了用三个前导零填充 i
变量,我使用 seq -w 0001 0009
。要下载具有正确文件名的图像,我使用 wget -O "${i}.jpg" ${URL}
。这项工作也适用于 9 张以上的图像,例如。生成从 1 到 999 的数字序列,前导零 (0001 ... 0099 ... 0999
) 命令变为 seq -w 0001 0999
.
请参阅 man seq
和 man wget
文档(在线 here and here)。
当然URL不能在变量${i}
和下划线之间包含前导零,否则wget
命令将return一个错误页面。
因此我将 URL 从 ..._1702_000$i.jpg/0/100/...
更改为 ..._1702_${i}.jpg/0/100/...
.
下载的文件:
~$ ls -l
total 20404
-rw-r--r-- 1 ale ale 2408227 Oct 9 22:38 0001.jpg
-rw-r--r-- 1 ale ale 2422199 Oct 9 22:38 0002.jpg
-rw-r--r-- 1 ale ale 2330667 Oct 9 22:38 0003.jpg
-rw-r--r-- 1 ale ale 2162542 Oct 9 22:38 0004.jpg
-rw-r--r-- 1 ale ale 2579155 Oct 9 22:38 0005.jpg
-rw-r--r-- 1 ale ale 2175118 Oct 9 22:38 0006.jpg
-rw-r--r-- 1 ale ale 2174325 Oct 9 22:38 0007.jpg
-rw-r--r-- 1 ale ale 2421311 Oct 9 22:38 0008.jpg
-rw-r--r-- 1 ale ale 2202587 Oct 9 22:38 0009.jpg
编辑:另一种选择。首先,我创建一个包含列表 URL:
的文件~$ URL1="http://archives.cg66.fr/mdr/index.php/docnumserv/getSubImage/0/0/0/-archives-009NUM_Etat_civil-Images---LLUPIA-2E1700_1702-FRAD066_2E1700_1702"
~$ URL2="0/100/0/100/100/100/100/100/2300/1500/0/100"
~$ for I in $(seq -w 0001 0009)
do
echo "${URL1}_{${I}}.jpg/${URL2}" >> url_list.txt
done
循环输出 URLs 格式如下:..._1702_{${I}}.jpg/0/100...
以便保存格式为:'#1.jpg'
.
~$ xargs -P 10 -n 1 curl -o '#1.jpg' < url_list.txt
但是,此解决方案可能会使网络服务器过载。如果出现问题,我认为使用 wget
解决方案添加选项 --limit-rate=amount
将下载速度限制为每秒 amount
字节可能会有所帮助。添加 k
表示千字节,M
表示兆字节。
参考文献:
- 命令并行化并从文件中获取一个参数 (
xargs -n 1 -P {number_files}
):https://serverfault.com/a/722874 - 使用自定义名称保存文件 (
curl -o '#1.jpg'
):https://unix.stackexchange.com/a/91574