URLs, die in einer Datei aufgelistet sind, mit curl herunterladen? [geschlossen]

15

Ich habe eine Datei, die alle URLs enthält, von denen ich sie herunterladen muss. Ich muss jedoch jeweils einen Download begrenzen. dh der nächste Download sollte erst beginnen, wenn der vorherige beendet ist. Ist das mit Curl möglich? Oder sollte ich etwas anderes verwenden.

Dev
quelle
3
Hallo und willkommen bei serverfault. Denken Sie bei Fragen auf dieser Website immer daran, dass wir nicht an Ihrer Stelle sind und nicht erraten können, welche Umgebung Sie verwenden. In diesem Fall haben Sie nicht angegeben, unter welchem ​​Betriebssystem Sie arbeiten, was die Beantwortung der Fragen erheblich erschwert.
Stephane

Antworten:

20
xargs -n 1 curl -O < your_files.txt
Grumdrig
quelle
2
Das ist die beste Antwort. Obwohl der Fragesteller nicht angegeben hat, ist es wahrscheinlich sicher anzunehmen, dass die Antworten für alle URLs in einzelne Dateien geschrieben werden sollten. Verwenden Sie dazu die -OOption mit cURL. xargs -n 1 curl -O < your_file.txt
LS
Genau. Also bearbeitet.
Grumdrig
Das ist wirklich was ich brauche.
Vu Ledang
19

wget(1) Funktioniert standardmäßig sequentiell und hat diese Option eingebaut:

   -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
quelle
3
Da der Fragesteller wissen möchte, wie dies mit cURL geschehen soll, sollte mindestens eine Lösung angegeben werden, die versucht, diese zu verwenden.
LS
4

Dies ist mit curl in einem Shell-Skript möglich, in etwa so, aber Sie müssen selbst nach geeigneten Optionen für curl suchen

while read URL
    curl some options $URL
    if required check exit status 
          take appropriate action
done <fileontainingurls
user9517
quelle
2
Ich verstehe, dass dies ein halber Pseudocode ist, aber ich denke, dass die while-Schleife immer noch ein "do" haben sollte.
Mittwoch,
1
@nwk es ist völlig Pseudocode und ich bin anderer Meinung.
Benutzer9517
Was ist, wenn eine URL kaufmännisches Und enthält? Werden sie entkommen? Ohne zu entkommen, denkt die Shell, dass der Befehl im Hintergrund ausgeführt werden sollte.
Jagger
2

Basierend auf der @ iain-Antwort, aber unter Verwendung des richtigen Shell-Skripts -

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

Funktioniert auch mit seltsamen Zeichen wie Et-Zeichen usw.

Kann das -Odurch eine Umleitung in eine Datei ersetzen , oder was auch immer geeignet ist.

Evgeny
quelle