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