下载 JSON 文件中的 URL 并使用特定的命名模式保存
Download URLs in JSON file and save with a specific naming pattern
我想下载图片并按索引重命名它们
我唯一拥有的是一个 jsonlines 文件,如下所示:
{"image": 136, "url": "https://enkistroy.ru/800/600/https/avatars.mds.yandex.net/get-zen_doc/1852570/pub_5dbb15dfba281e00b14b4174_5dbb2300e3062c00b072ecce/scale_1200"}
{"image": 137, "url": "https://forums.cdprojektred.com/index.php?attachments/unbenannt-jpg.6709974/"}
{"image": 138, "url": "https://64.media.tumblr.com/1309f93790c53ccacc333b28d12dac66/tumblr_p9fqienz291x5m66ko1_r1_1280.png"}
{"image": 139, "url": "https://i.pinimg.com/originals/4c/21/0c/4c210ca963cf4d52636615ac08126b05.jpg"}
我试过使用 jq tool, grep, wget and curl
egrep -o 'https:[^\"]*jpg' images.json | xargs -n 1 curl -O
这只会下载带有 jpg 文件的 https 链接而不重命名它们
也许编写 python 脚本会更容易?
编辑:
试过了,不确定如何用 curl 重命名? curl -O "#1.jpg"
jq -r '.url' images.json | parallel curl -O
听起来你想要这样的东西:
$ cat tst.sh
#!/usr/bin/env bash
idx=0
while IFS= read -r url; do
(( idx++ ))
sfx="${url##*.}"
case "$sfx" in
png ) ;;
* ) sfx='jpg' ;;
esac
echo curl "$url" -o "${idx}.${sfx}"
done < <(jq -r '.url' "${1:-images.json}")
$ ./tst.sh
curl https://enkistroy.ru/800/600/https/avatars.mds.yandex.net/get-zen_doc/1852570/pub_5dbb15dfba281e00b14b4174_5dbb2300e3062c00b072ecce/scale_1200 -o 1.jpg
curl https://forums.cdprojektred.com/index.php?attachments/unbenannt-jpg.6709974/ -o 2.jpg
curl https://64.media.tumblr.com/1309f93790c53ccacc333b28d12dac66/tumblr_p9fqienz291x5m66ko1_r1_1280.png -o 3.png
curl https://i.pinimg.com/originals/4c/21/0c/4c210ca963cf4d52636615ac08126b05.jpg -o 4.jpg
以上假设任何不以 .png
结尾的 URL 都是 JPEG,根据您所知道的任何规则进行按摩以识别要用作文件的图像类型后缀或将 curl 限制为仅 JPEG 文件。
当您完成测试并想要实际执行 curl
时,显然删除 echo
。
以图片数据为索引(见下方评论):
$ cat tst.sh
#!/usr/bin/env bash
while read -r idx url; do
sfx="${url##*.}"
case "$sfx" in
png ) ;;
* ) sfx='jpg' ;;
esac
echo curl "$url" -o "${idx}.${sfx}"
done < <( jq -j '.image, " ", .url, "\n"' "${1:-images.json}" )
$ ./tst.sh
curl https://enkistroy.ru/800/600/https/avatars.mds.yandex.net/get-zen_doc/1852570/pub_5dbb15dfba281e00b14b4174_5dbb2300e3062c00b072ecce/scale_1200 -o 136.jpg
curl https://forums.cdprojektred.com/index.php?attachments/unbenannt-jpg.6709974/ -o 137.jpg
curl https://64.media.tumblr.com/1309f93790c53ccacc333b28d12dac66/tumblr_p9fqienz291x5m66ko1_r1_1280.png -o 138.png
curl https://i.pinimg.com/originals/4c/21/0c/4c210ca963cf4d52636615ac08126b05.jpg -o 139.jpg
也许编写 python 脚本会更容易?
Python 有内置模块 imghdr
如果你有图像文件,但不知道是什么格式,它会派上用场。假设您下载了 https://64.media.tumblr.com/1309f93790c53ccacc333b28d12dac66/tumblr_p9fqienz291x5m66ko1_r1_1280.png
并将其保存在名称 138
下,以检测它实际上是什么格式的图像 在同一目录中启动 python
并执行
import imghdr
imgformat = imghdr.what("138")
print(imgformat)
输出
jpeg
内置 os
模块允许轻松更改名称以包含此扩展名,即:
import imghdr
import os
filename = "138"
imgformat = imghdr.what("138")
if imgformat:
os.rename(filename, filename + "." + imgformat)
注意使用if imgformat:
所以当图像格式无法识别时没有操作
我想下载图片并按索引重命名它们
我唯一拥有的是一个 jsonlines 文件,如下所示:
{"image": 136, "url": "https://enkistroy.ru/800/600/https/avatars.mds.yandex.net/get-zen_doc/1852570/pub_5dbb15dfba281e00b14b4174_5dbb2300e3062c00b072ecce/scale_1200"}
{"image": 137, "url": "https://forums.cdprojektred.com/index.php?attachments/unbenannt-jpg.6709974/"}
{"image": 138, "url": "https://64.media.tumblr.com/1309f93790c53ccacc333b28d12dac66/tumblr_p9fqienz291x5m66ko1_r1_1280.png"}
{"image": 139, "url": "https://i.pinimg.com/originals/4c/21/0c/4c210ca963cf4d52636615ac08126b05.jpg"}
我试过使用 jq tool, grep, wget and curl
egrep -o 'https:[^\"]*jpg' images.json | xargs -n 1 curl -O
这只会下载带有 jpg 文件的 https 链接而不重命名它们
也许编写 python 脚本会更容易?
编辑:
试过了,不确定如何用 curl 重命名? curl -O "#1.jpg"
jq -r '.url' images.json | parallel curl -O
听起来你想要这样的东西:
$ cat tst.sh
#!/usr/bin/env bash
idx=0
while IFS= read -r url; do
(( idx++ ))
sfx="${url##*.}"
case "$sfx" in
png ) ;;
* ) sfx='jpg' ;;
esac
echo curl "$url" -o "${idx}.${sfx}"
done < <(jq -r '.url' "${1:-images.json}")
$ ./tst.sh
curl https://enkistroy.ru/800/600/https/avatars.mds.yandex.net/get-zen_doc/1852570/pub_5dbb15dfba281e00b14b4174_5dbb2300e3062c00b072ecce/scale_1200 -o 1.jpg
curl https://forums.cdprojektred.com/index.php?attachments/unbenannt-jpg.6709974/ -o 2.jpg
curl https://64.media.tumblr.com/1309f93790c53ccacc333b28d12dac66/tumblr_p9fqienz291x5m66ko1_r1_1280.png -o 3.png
curl https://i.pinimg.com/originals/4c/21/0c/4c210ca963cf4d52636615ac08126b05.jpg -o 4.jpg
以上假设任何不以 .png
结尾的 URL 都是 JPEG,根据您所知道的任何规则进行按摩以识别要用作文件的图像类型后缀或将 curl 限制为仅 JPEG 文件。
当您完成测试并想要实际执行 curl
时,显然删除 echo
。
以图片数据为索引(见下方评论):
$ cat tst.sh
#!/usr/bin/env bash
while read -r idx url; do
sfx="${url##*.}"
case "$sfx" in
png ) ;;
* ) sfx='jpg' ;;
esac
echo curl "$url" -o "${idx}.${sfx}"
done < <( jq -j '.image, " ", .url, "\n"' "${1:-images.json}" )
$ ./tst.sh
curl https://enkistroy.ru/800/600/https/avatars.mds.yandex.net/get-zen_doc/1852570/pub_5dbb15dfba281e00b14b4174_5dbb2300e3062c00b072ecce/scale_1200 -o 136.jpg
curl https://forums.cdprojektred.com/index.php?attachments/unbenannt-jpg.6709974/ -o 137.jpg
curl https://64.media.tumblr.com/1309f93790c53ccacc333b28d12dac66/tumblr_p9fqienz291x5m66ko1_r1_1280.png -o 138.png
curl https://i.pinimg.com/originals/4c/21/0c/4c210ca963cf4d52636615ac08126b05.jpg -o 139.jpg
也许编写 python 脚本会更容易?
Python 有内置模块 imghdr
如果你有图像文件,但不知道是什么格式,它会派上用场。假设您下载了 https://64.media.tumblr.com/1309f93790c53ccacc333b28d12dac66/tumblr_p9fqienz291x5m66ko1_r1_1280.png
并将其保存在名称 138
下,以检测它实际上是什么格式的图像 在同一目录中启动 python
并执行
import imghdr
imgformat = imghdr.what("138")
print(imgformat)
输出
jpeg
内置 os
模块允许轻松更改名称以包含此扩展名,即:
import imghdr
import os
filename = "138"
imgformat = imghdr.what("138")
if imgformat:
os.rename(filename, filename + "." + imgformat)
注意使用if imgformat:
所以当图像格式无法识别时没有操作