【问题标题】:Bash For Loop: Convert URL to .jpg File and Retain URL id in Image FilenameBash For Loop:将 URL 转换为 .jpg 文件并在图像文件名中保留 URL id
【发布时间】:2022-01-10 17:52:58
【问题描述】:

我是 bash 新手。我编写了以下 for 循环来使用 basename 将 URL 数组转换为图像文件:

for i in ${img_jpg[@]//\"/} ; do convert "$i" -set filename:base "%[basename]" "%[filename:base].png" ; done 

它适用于如下格式的 URL:

https://xxx.domain.com/xy22233

现在我想创建一个类似的循环,使用 basename 没有文件扩展名的 url,如下所示:

https://img.domain.com/vi/y2x112233/default.jpg

我想输出一个只有这部分 URL 的文件:

y2x112233

甚至是整个 URL。

这是我的尝试,但没有成功:

for i in ${img_jpg[@]//\"/} ; do convert "$i" "${filename%.*}" ; done

【问题讨论】:

  • basename $(dirname "https://img.domain.com/vi/y2x112233/default.jpg")?
  • 看起来确实可行。您是否碰巧知道如何将其合并到循环中?

标签: bash loops imagemagick


【解决方案1】:

这是使用 ImageMagick convert 进行循环的一种方法。

filelist="https://img.youtube.com/vi/--1uHerc2Ns/hqdefault.jpg"
for file in $filelist; do
dir=$(dirname $file)
base=$(basename $dir)
echo $dir
echo $base
echo $file
convert $file $base.jpg
done

根据需要更改“for”循环。

【讨论】:

  • 感谢您的建议。虽然这确实提取了我想要的字符串,但它在转换语句之前执行它,因此它只回显 ID 而不会生成 .jpg 文件。
  • 我列出的文件是伪造的。您必须提供自己的正确 URL。一旦你有有效的 URL,那么它应该可以工作。尝试使用convert https://img.domain.com/vi/y2x112233/default.jpg result.jpg 形式的有效 URL 的简单命令。如果这不起作用,那么您可能需要编辑 ImageMagick policy.xml 文件以授予使用 HTTP/HTTPS 的权限。
  • 谢谢!是的,基本的转换语句确实有效。我正在使用上面将文件列表定义为我的数组的代码:filelist=${img_jpg2[@]//\"/} 我的错误是:convert-im6.q16: no decode delegate for this image format ' @ error/constitute.c/ReadImage/575. convert-im6.q16: no images defined 。 jpg'@error/convert.c/ConvertImageCommand/3229。但它也回显了正确的 ID。我已经验证了数组并在另一个循环中使用了它,所以我不认为数组有问题。跨度>
  • 你从filelist=${img_jpg2[@]//\"/}; echo $filelist 得到什么 打印出正确的名字吗?是否有任何文件的名称中有空格?请在此处显示结果。您在哪个目录中发出该命令?它包含您的文件吗?
  • 我已经在我的答案中编辑了命令,它似乎可以与该 URL 一起使用。因此,在该代码中尝试您的 filelist 命令。如果可以,您可以删除 echo 命令。
猜你喜欢
  • 1970-01-01
  • 2022-11-11
  • 1970-01-01
  • 1970-01-01
  • 2011-05-24
  • 2012-07-26
  • 1970-01-01
  • 1970-01-01
  • 2016-02-14
相关资源
最近更新 更多