curlを使用してファイルにリストされているURLをダウンロードしますか?[閉まっている]


15

ダウンロードする必要があるすべてのURLを含むファイルがあります。ただし、一度に1つのダウンロードを制限する必要があります。つまり、次のダウンロードは、前のダウンロードが終了した後にのみ開始する必要があります。これはcurlを使用して可能ですか?または、他のものを使用する必要があります。


3
こんにちは、serverfaultへようこそ。このサイトで質問をするときは、私たちがあなたの代わりではなく、あなたが使用している環境を推測できないことを常に覚えておいてください。この場合、実行しているOSを指定しなかったため、適切に応答できなくなります。
ステファン

回答:


20
xargs -n 1 curl -O < your_files.txt

2
これが最良の答えです。質問者は指定しませんでしたが、すべてのURLの応答を個々のファイルに書き込む必要があると想定するのはおそらく安全です。これ-Oを行うには、cURLでオプションを使用します。 xargs -n 1 curl -O < your_file.txt
LS

同意する。編集しました。
Grumdrig

これは本当に必要なものです。
vu ledang

19

wget(1) デフォルトでシーケンシャルに動作し、このオプションが組み込まれています:

   -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.

3
質問者はcURLを使用してこれを行う方法を知りたいので、少なくともそれを使用しようとするソリューションを含める必要があります。
LS

4

これは、このようなシェルスクリプト内でcurlを使用して可能ですが、curlなどの適切なオプションを自分で調査する必要があります。

while read URL
    curl some options $URL
    if required check exit status 
          take appropriate action
done <fileontainingurls

2
私はこれが半分の擬似コードであることを理解していますが、whileループにはまだ「do」が必要だと思います。
nwk 14

1
@nwkそれは完全に擬似コードであり、私は同意しません。
user9517

URLにアンパサンドが含まれている場合はどうなりますか?彼らは逃げられますか?シェルをエスケープせずに、コマンドをバックグラウンドで実行する必要があると考えます。
ジャガー14

2

@iainの回答に基づいていますが、適切なシェルスクリプトを使用しています-

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

アンパサンドなどの奇妙な文字でも動作します...

-O代わりにファイルへのリダイレクト、または適切なものに置き換えることができます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.