仅输出依赖于 mime-type 的 curl 结果

仅输出依赖于 mime-type 的 curl 结果

curl -o如果文件属于特定的 mime 类型,是否可以让 curl 仅保存其输出?

例如,我可能会使用以下命令从服务器下载一堆图像...

curl -o file_#1.jpg http://wwww.mysite.com/images.php?id=[1-50]

在该网站上,如果没有具有该 ID 的图像,它可能会返回 text/html。有没有办法过滤 curl 结果,以便它只保存 image/jpeg 类型的文件?

答案1

以下是在 bash 中执行此操作的一种方法:

declare -i i=1
while (( $i <= 50 ))
do
    filename="file_${i}.jpg"
    curl -o ${filename} http://wwww.mysite.com/images.php?id=${i}
    if ! file ${filename} | grep -qi image
    then
      rm -f ${filename}
    fi
    i=$(($i + 1))
done

这将循环遍历所有 50 张潜在图像,下载每张图像,检查它是否真的是图像,如果不是,则删除下载的文件。

如果您的平台有该seq命令,您可以通过这种方式简化循环:

for i in $(seq 50)
do
    filename="file_${i}.jpg"
    curl -o ${filename} http://wwww.mysite.com/images.php?id=${i}
    if ! file ${filename} | grep -qi image
    then
      rm -f ${filename}
    fi
done

在较新的 bash 版本中,您还可以使用以下{n..m}构造:

for i in {1..50}
do
    ...
done

相关内容