通过wget获取内存和放大器绕过磁盘写入

时间:2010-01-11 20:52:40

标签: pipe wget io-redirection ramdisk

是否可以将网站内容 - 一组HTML页面 - 直接下载到内存而无需写入磁盘?

我有一组机器,每台机器都安装了24G,但我受限于磁盘配额到几百MB。我在考虑将输出wget重定向到某种内存结构而不将内容存储在磁盘上。另一种选择是创建我自己的wget版本,但可能有一种简单的方法来管道

此外,并行运行此下载的最佳方式是什么(群集具有> 20个节点)。在这种情况下无法使用文件系统。

4 个答案:

答案 0 :(得分:13)

请参阅wget download options

  
    

' - O档'

         

' - 输出文档=文件

         

文档不会写入相应的文件,但所有文件将连接在一起并写入文件。如果' - '用作文件,文档将打印到标准输出,禁用链接转换。 (使用'./-'打印到名为' - '的文件。)

  

如果要将文件读入Perl程序,可以使用反引号调用wget

根据您 需要做的事情,您可能只需使用LWP::Simpleget即可获得。

use LWP::Simple;
my $content = get("http://www.example.com/");
die "Couldn't get it!" unless defined $content;

更新:我不知道您可以使用FuseFuse.pm在Perl中实现自己的文件系统。另请参阅Fuse::InMemory

答案 1 :(得分:5)

你是根吗?您可以使用tmpfs

重新编辑:你没有CPU限制,你不需要使用每台机器。您可以使用xargs -n SOME_NUMBER拆分根网址列表,假设有几个。

但是,如果您热衷于共享内存,则可以设置群集内存缓存并将其安装在memcachefs的每台计算机上。

答案 2 :(得分:5)

如果你a)已经在使用Perl,b)想要下载HTML,并且c)解析它,我总是建议LWPHTML::TreeBuilder

答案 3 :(得分:2)

wget <url> -O -

将URL的内容写入标准输出,然后可以在内存中捕获。