Wget 内存不足错误会杀死进程

gio*_*321 6 wget out-of-memory

我想从我的 carddav 服务器 (ownCloud) 备份我所有的 .vcf 文件。该脚本非常简单,如下所示:

$ wget -Avcf -r -np -l0 --no-check-certificate -e robots=off --user=user \
    --password='password' https://cloud.domain.com/foo/carddav
Run Code Online (Sandbox Code Playgroud)

.vcf 文件总数约 400 个,下载约 70 个后,wget 返回此错误:

   ss 错误

原文网址:http : //oi40.tinypic.com/2ch9itt.jpg

由于系统“内存不足”而终止进程。系统是Debian Wheezy 虚拟机,运行在Windows 7 上。我尝试将RAM 提高到1024MB 而不是实际的128MB,但问题仍然存在。

有关如何解决此问题或实现此目标的替代方法的任何建议?

Sly*_*lyx 3

看来wget循环会导致内存溢出
自然的第一个建议是将云实例的内存从 1Gb 再次增加到 2Gb。这最近解决了类似的问题。

如果这不可能或不能解决问题,则第二种解决方案是wget在 2 个步骤内运行:

  1. 检索文件列表。正如我在您的屏幕截图中看到的,文件位于目录中cloud.some_domain.com/remote.php/carddav/addressbooks/your_name/
    因此,运行wget以获取目录索引:
    wget https://cloud.some_domain.com/remote.php/carddav/addressbooks/your_name/
    这将为您提供一个index.html文件。

  2. 现在您可以解析它以检索要下载的文件名:

    grep ".vcf" index.html | awk -F"href=" '{print $2}' | awk -F\" '{print $2}' > ALL_VCF_FILES.lst
    for elt in `cat ALL_VCF_FILES.lst`
    do
    wget https://cloud.some_domain.com/remote.php/carddav/addressbooks/your_name/$elt
    done
    rm ALL_VCF_FILES.lst index.html
    
    Run Code Online (Sandbox Code Playgroud)