Nombre CURL del archivo de origen = nombre del archivo de destino

Nombre CURL del archivo de origen = nombre del archivo de destino

Quiero descargar muchos archivos que tengan nombres similares: xxx/1.jpg, xxx/2.jpg, xxx/3.jpgy así sucesivamente C:/Brawa/. Entonces escribo:

CURL https://example/xxx/[1-3].jpg -o C:/Brawa/#1.jpg

Ahora quiero que el nombre del archivo de origen se corresponda con el nombre del archivo de destino: C:/Brawa/xxx/1.jpg; C:/Brawa/xxx/2.jpg; C:/Brawa/xxx/3.jpg, etcétera.

Yo uso la línea de comando:

CURL https://example/xxx/[1-3].jpg -o --remote-name C:/Brawa/*.jpg

Algo no funciona, pero ¿qué hice mal?

Respuesta1

Creo que esto debería funcionar:

CURL https://example/xxx/[1-3].jpg -o --remote-name C:/Brawa/#1.jpg

Respuesta2

Los valores de las opciones deben ser adyacentes.Con todos los programas basados ​​en Unix o Unix, y la mayoría de los basados ​​en C, si especifica una opción con un valor, como aquí -o C:/some/path, debe mantener la opción 'bandera' y su valor juntos, no puede insertar nada más en el medio. . En casi todos los casos, puede utilizar argumentos consecutivos como se muestra, o unsolteroargumento concatenado como -oC:/some/path(para formato corto) o --output=c:/some/path(signo igual agregado para formato largo, es decir, dos guiones). Esto es más obvio en Windows (CMD), donde normalmente se usa /flag:valuetodo ejecutado juntos, lo que le disuade de intentar insertar algo intermedio.

Como comentaste en la respuesta de harrymc,--remote-name -o c:/some/path analizacorrectamente pero no funciona, eso se debe a que dan instrucciones contradictorias y solo obedece la primera. -o c:/some/path --remote-nametambién analizaría, pero solo obedecería al primero (que si es un archivo escribiría cada URL en el mismo archivo, dejando solo el último, y si es un directorio no escribiría en absoluto).

Aparte deLa respuesta de Anaksunaman.puedecambiar el directorioa la ubicación deseada, utilicesolo --remote-name(o -Omayúscula, de cualquier manera conNovalor), luego cambie el directorio nuevamente. CMD es compatible pushdy popdcomo la mayoría de los shells de Unix, por lo que

 pushd c:\brawa\xxx & curl https://example/xxx/[1-3].jpg -O & popd

Respuesta3

Suponiendo que está utilizando una versión actualizada curl(versión 7.73.0 o superior), debería poder agregar la nueva --output-diropción para especificar un directorio de salida, por ejemplo:

curl https://example/xxx/[1-3].jpg -O --output-dir "C:/Brawa/xxx"

Tenga en cuenta que -O(oh mayúscula) es el mismo que --remote-nameen el ejemplo anterior.

Los binarios oficiales actualizados curlpara Windows están disponiblesaquíy la documentación de opciones para las versiones más recientes curlestá disponibleaquí.


Tenga en cuenta que para crear carpetas dinámicamente, puede usar la --create-dirsopción para curl(según la sección de la página de manual de curl para--output-dir). Sin embargo, esto parece basarse en la --output-diropción del ejemplo anterior, por lo que cambiar este valor puede requerir secuencias de comandos adicionales (no pude obtener la sugerencia que figura enla respuesta de harrymca esta pregunta funciona correctamente en Windows 7).

información relacionada