Descargar URL que figuran en un archivo usando curl? [cerrado]

15

Tengo un archivo que tiene todas las URL de las que necesito descargar. Sin embargo, necesito limitar una descarga a la vez. es decir, la próxima descarga debe comenzar solo una vez que finalice la anterior. ¿Es esto posible usando curl? O debería usar cualquier otra cosa.

Dev
fuente
3
Hola y bienvenidos a serverfault. Cuando haga preguntas en este sitio, recuerde siempre que no estamos en su lugar y no podemos adivinar qué entorno está utilizando. En este caso, no especificó qué sistema operativo está ejecutando, lo que dificultará la respuesta adecuada.
Stephane

Respuestas:

20
xargs -n 1 curl -O < your_files.txt
Grumdrig
fuente
2
Esta es la mejor respuesta. Aunque el autor de la pregunta no especificó, probablemente sea seguro asumir que las respuestas para todas las URL deben escribirse en archivos individuales. Use la -Oopción con cURL para hacer eso. xargs -n 1 curl -O < your_file.txt
LS
Estoy de acuerdo. Así editado.
Grumdrig
Esto es realmente lo que necesito.
vu ledang
19

wget(1) funciona secuencialmente de forma predeterminada y tiene esta opción integrada:

   -i file
   --input-file=file
       Read URLs from a local or external file.  If - is specified as file, URLs are read from the standard input.  (Use ./- to read from a file literally named -.)

       If this function is used, no URLs need be present on the command line.  If there are URLs both on the command line and in an input file, those on the command lines will be the first ones to be retrieved.  If
       --force-html is not specified, then file should consist of a series of URLs, one per line.

       However, if you specify --force-html, the document will be regarded as html.  In that case you may have problems with relative links, which you can solve either by adding "<base href="url">" to the documents
       or by specifying --base=url on the command line.

       If the file is an external one, the document will be automatically treated as html if the Content-Type matches text/html.  Furthermore, the file's location will be implicitly used as base href if none was
       specified.
Dawud
fuente
3
Como el autor de la pregunta quería saber cómo hacer esto usando cURL, al menos debería incluir una solución que intente usarlo.
LS
4

Esto es posible usando curl dentro de un script de shell, algo como esto, pero deberá investigar las opciones apropiadas para curl, etc.

while read URL
    curl some options $URL
    if required check exit status 
          take appropriate action
done <fileontainingurls
usuario9517
fuente
2
Entiendo que esto es medio pseudocódigo, pero creo que el ciclo while debería tener un "hacer".
nwk
1
@nwk es completamente pseudocódigo y no estoy de acuerdo.
user9517
¿Qué pasa si una URL contiene símbolos? ¿Se escaparán? Sin escapar, el shell pensará que el comando debe ejecutarse en segundo plano.
Jagger
2

Basado en la respuesta @iain, pero usando un script de shell adecuado:

while read url; do
  echo "== $url =="
  curl -sL -O "$url"
done < list_of_urls.txt

También funcionará con personajes extraños como símbolos, etc.

En su lugar, puede reemplazarlo -Ocon una redirección a un archivo, o lo que sea adecuado.

Evgeny
fuente