Unduh url yang tercantum dalam file menggunakan curl? [Tutup]

15

Saya memiliki file yang memiliki semua url tempat saya perlu mengunduh. Namun saya perlu membatasi satu unduhan pada satu waktu. yaitu unduhan berikutnya harus dimulai hanya setelah yang sebelumnya selesai. Apakah ini mungkin menggunakan curl? Atau haruskah saya menggunakan yang lain.

Dev
sumber
3
Halo dan selamat datang di serverfault. Saat mengajukan pertanyaan di situs ini, harap selalu ingat bahwa kami tidak ada di tempat Anda dan tidak dapat menebak lingkungan apa yang Anda gunakan. Dalam hal ini, Anda tidak menentukan OS apa yang Anda jalankan yang akan membuat Anda menjawab dengan benar.
Stephane

Jawaban:

20
xargs -n 1 curl -O < your_files.txt
Grumdrig
sumber
2
Ini jawaban terbaik. Meskipun penanya tidak menentukan, mungkin aman untuk menganggap respons untuk semua URL harus ditulis ke file individual. Gunakan -Oopsi dengan cURL untuk melakukan itu. xargs -n 1 curl -O < your_file.txt
LS
Saya setuju. Sudah diedit.
Grumdrig
Ini benar-benar yang saya butuhkan.
vu ledang
19

wget(1) bekerja berurutan secara default, dan memiliki opsi ini bawaan:

   -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
sumber
3
Karena penanya ingin tahu cara melakukan ini menggunakan CURL, Anda setidaknya harus menyertakan solusi yang mencoba menggunakannya.
LS
4

Ini dimungkinkan menggunakan ikal dalam skrip shell, sesuatu seperti ini, tetapi Anda harus meneliti opsi yang sesuai untuk ikal dll untuk Anda sendiri

while read URL
    curl some options $URL
    if required check exit status 
          take appropriate action
done <fileontainingurls
user9517
sumber
2
Saya mengerti ini setengah pseudocode tapi saya pikir sementara loop masih harus memiliki "do".
nwk
1
@ nwk itu sepenuhnya pseudocode dan saya tidak setuju.
user9517
Bagaimana jika suatu URL berisi ampersand? Apakah mereka akan lolos? Tanpa melarikan diri shell akan berpikir bahwa perintah itu harus dijalankan di latar belakang.
Jagger
2

Berdasarkan jawaban @ain, tetapi menggunakan skrip shell yang tepat -

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

Juga akan bekerja dengan karakter aneh seperti ampersand, dll ...

Dapat mengganti -Odengan redirect ke file, atau apa pun yang cocok.

Evgeny
sumber