下载几千个文件 - 如何?

下载几千个文件 - 如何?

我想一一下载几千个文件。每个的平均大小为 5-10Mb。每个都有一个名称“name_{i}”,其中“i”是一个计数器。最简单和最好的方法是什么?

请注意,互联网连接可能会中断,我想中断该过程并稍后继续。在这些情况下,下次我运行脚本或发生任何情况时,它应该获取上次下载的文件,并在需要时重新下载它。

答案1

我相信你可以编写一个小的 shell 脚本来完成你想要的事情。使用 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}"- 我不确定这是否意味着文件名中包含 {} 大括号。如果没有,只需从上面的行中删除\{and即可。\}wget

如果文件名有零填充的数字(例如 0005 而不仅仅是 5),您可以使用seq而不是eval {$last..1000}像这样:

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

答案3

看看lftpmirror选项:

镜像 [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).

lftp可用于通过 HTTP 获取文件。尝试:

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

相关内容