¿Hay alguna forma de usar curl para descargar imágenes no secuenciales con un comodín? Quiero descargar todas las panorámicas que subo a mi cuenta en 360 Panorama a una carpeta local para no tener que hacerlo manualmente cada vez.
Los archivos de imágenes siguen el patrón de: http://occipital.com/images/viewer/XYZ_flat.jpg con XYZ al azar. También parece de esa URL que necesito estar conectado o visto como conectado al sitio.
Puede usar este bash
código para la URL real que proporcionó en su comentario .
for i in $(for j in {1..8}; do
curl http://occipital.com/user/01ca-255/george-coghill/$j/;
done \
| sed -n 's,.*/viewer/\(......_flat\)_small\.jpg.*,http://occipital.com/images/viewer/\1.jpg,p'
); do
curl -L -o "${i##*/}" "$i";
done
Siéntase libre de escribir este comando en una sola línea; todos los saltos de línea solo se agregaron para aumentar la legibilidad. Puede copiarlos o eliminarlos, lo que quiera.
Lo que hace este código:
Si solo desea descargar archivos que no existen y no sabe la cantidad de páginas de la galería por adelantado, puede ajustar el código a esto:
for i in $(
j=1;
while curl --max-redirs 0 -L -f \
http://occipital.com/user/01ca-255/george-coghill/$((j++))/; do
:;
done \
| sed -n 's,.*/viewer/\(......_flat\)_small\.jpg.*,http://occipital.com/images/viewer/\1.jpg,p'
); do
[[ -f "${i##*/}" ]] || curl -L -o "${i##*/}" "$i";
done
El primer código ahora incrementa el número de página hasta que ocurre una redirección o un error. El servidor lo redirigirá a la última página existente si intenta visitar una página posterior a las existentes. La [[ -f … ]] ||
parte se ejecutará curl
solo si el archivo correspondiente aún no existe.
"${i##*/}"
es el nombre del archivo en su máquina local; puede anteponer un nombre de directorio a eso, por ejemplo, "some/dir/${i##*/}"
. O simplemente cd
ingresa primero al directorio deseado.¿Quiere descargar imágenes de http://occipital.com/images/viewer/ *_flat.jpg?
Esto no es posible. No puede tratar al espectador como una carpeta. La web es un servicio que te proporciona cosas cuando tú lo pides. No tiene una lista de todos los archivos. A menos que pruebe todos los archivos desde AAA hasta ZZZ, esto no es posible sin una lista.
Si bien no puede usar un comodín verdadero, puede especificar partes entre llaves, es decir. curl mysite.{alpha,beta,gamma}.com o rangos de números mysite.com/files[0001-0100].txt
Consulte la página de manual de curl para obtener más información.
http://curl.haxx.se/docs/manpage.html
Entonces, para sus archivos que son aleatorios, puede hacer mages/viewer/[000-999]_flat.jpg Terminaría con muchos archivos no encontrados, pero debería obtener todos los archivos que están allí.
Como dijo ClarkGoble, use algo como esta solución de "fuerza bruta":
curl http://occipital.com/images/viewer/[1-999:1]_flat.jpg -f -o -image_#1_flat.jpg
La opción "-f" evitará que curl escriba archivos de salida si recibe un error 404. Por lo tanto, obtendrá resultados solo para los archivos que se encuentran en el servidor.
-o significa "salida"
#1 coincide con el patrón de reemplazo, es decir, en el caso, los números a partir de 1, hasta 999, con un paso de 1.
jorge c
Arjan
sin ladera
curl
.jorge c
jorge c
Arjan
jorge c
izq.