何千ものファイルをダウンロード - どのように?

何千ものファイルをダウンロード - どのように?

何千ものファイルを一つずつダウンロードしたいです。それぞれの平均サイズは5〜10Mbです。それぞれに「name_{i}」という名前があります。ここで「i」はカウンタです。最も簡単で良い方法は何ですか?

インターネット接続が中断される可能性があるため、このプロセスを中止して後で続行したいと思います。このような場合は、次にスクリプトを実行するか、何が起こった場合は最後にダウンロードしたファイルをインポートし、必要に応じて再ダウンロードする必要があります。

答え1

私はあなたが望むことを達成するために小さなシェルスクリプトを書くことができると思います。 forループを使用してファイルを繰り返し、wgetなどを使用して現在のファイルをダウンロードし、中断後に場所を読み取ることができるファイルに書き込みます。

例:

if [ -f $FILE ] count=$(cat file) for i in {$COUNT ..5} do wget https://foo.bar/name_$i echo "$i" > $FILE done else for i in {1..5} do wget https://foo.bar/name_$i echo "$i" > $FILE done fi

これは基本的なアイデアに過ぎず、ちょっとしたバグがあるかもしれませんが、私の考えを理解すると思います。

答え2

BASE_URL='http://some.site.somewhere.com/some/path'
LASTFILE='./countfile'
last=1
[ -e "$LASTFILE" ] && last=$(cat "$LASTFILE")

for i in $(eval {$last..1000}) ; do
   echo "$i" > "$LASTFILE"
   wget -c "$BASE_URL/name_\{$i\}"
done

あなたはそう言ったEach has a name of "name_{i}"。ファイル名に{}中括弧が含まれていることを意味するかどうかはわかりません。そうでない場合は、上記の行から削除してください\{\}wget

ファイル名にゼロで埋められた数字がある場合(たとえば、5ではなく0005)、seq代わりにeval {$last..1000}次のように使用できます。

for i in $(seq -w $last 1000); do
...
done

答え3

オプションをlftp見てください:mirror

ミラー[OPTS][ソース[対象]]

   Mirror specified source directory to local target directory. If  the  target  directory  ends
   with  a  slash  (except the root), the source base name is appended to target directory name.
   Source and/or target can be URLs pointing to directories.

バラよりhttp://lftp.yar.ru/lftp-man.htmlもっと学ぶ。

編集する

マニュアルから:

lftp は、複雑な FTP、HTTP、その他のホストへのその他の接続を可能にするファイル転送プログラムです。サイトが指定されている場合、lftpはそのサイトに接続し、そうでない場合はopenコマンドを使用して接続を確立する必要があります。

   lftp  can  handle  several file access methods - FTP, FTPS, HTTP, HTTPS, HFTP, FISH, SFTP and
   file (HTTPS and FTPS are only available when  lftp  is  compiled  with  GNU  TLS  or  OpenSSL
   library).

lftpHTTP経由でファイルをインポートするために使用できます。努力する:

lftp -e "mirror -c" http://url

関連情報