获取Web服务器上的文件列表

时间:2011-08-08 23:10:00

标签: http curl wget

所有

我想从服务器上获取完整网址的文件列表。例如,我想从这里获得所有TIFF。

http://hyperquad.telascience.org/naipsource/Texas/20100801/ *

我可以使用wget下载所有.tif文件,但我正在寻找的只是每个文件的完整网址。

http://hyperquad.telascience.org/naipsource/Texas/20100801/naip10_1m_2597_04_2_20100430.tif http://hyperquad.telascience.org/naipsource/Texas/20100801/naip10_1m_2597_04_3_20100424.tif http://hyperquad.telascience.org/naipsource/Texas/20100801/naip10_1m_2597_04_4_20100430.tif http://hyperquad.telascience.org/naipsource/Texas/20100801/naip10_1m_2597_05_1_20100430.tif http://hyperquad.telascience.org/naipsource/Texas/20100801/naip10_1m_2597_05_2_20100430.tif

有关如何使用curl或wget之类的内容将所有这些文件放入列表的想法吗?

亚当

5 个答案:

答案 0 :(得分:4)

您需要服务器愿意为您提供一个包含列表的页面。这通常是index.html或只是询问目录。

http://hyperquad.telascience.org/naipsource/Texas/20100801/

看起来你在这种情况下很幸运,因此,有可能让网页管理员感到不安,解决方案就是使用wget的递归选项。指定最大递归1以使其受限于该单个目录。

答案 1 :(得分:3)

我会使用lynx shell网络浏览器获取链接列表+ grepawk shell工具来过滤结果,如下所示:

lynx -dump -listonly <URL> | grep http | grep <regexp> | awk '{print $2}'

...其中:

  • 网址 - 在您的情况下是起始网址:http://hyperquad.telascience.org/naipsource/Texas/20100801/
  • regexp - 是正则表达式,只选择您感兴趣的文件,在您的情况下:\.tif$


完整示例命令行以获取此SO页面上的TIF文件的链接:

lynx -dump -listonly http://stackoverflow.com/questions/6989681/getting-a-list-of-files-on-a-web-server | grep http | grep \.tif$ | awk '{print $2}'

..现在返回:

http://hyperquad.telascience.org/naipsource/Texas/20100801/naip10_1m_2597_04_2_20100430.tif
http://hyperquad.telascience.org/naipsource/Texas/20100801/naip10_1m_2597_04_4_20100430.tif
http://hyperquad.telascience.org/naipsource/Texas/20100801/naip10_1m_2597_05_2_20100430.tif

答案 2 :(得分:1)

如果您wget http://hyperquad.telascience.org/naipsource/Texas/20100801/,则返回的HTML包含文件列表。如果您不需要通用,则可以使用正则表达式来提取链接。如果您需要更强大的功能,可以使用HTML解析器(例如BeautifulSoup),并以编程方式提取页面上的链接(来自实际的HTML结构)。

答案 3 :(得分:1)

在winscp中有一个查找窗口,可以从自己的Web目录中搜索目录和子目录中的所有文件-在可能的情况下,全选并复制,并在文本中包含所有文件的所有链接-需要具有连接ftp的用户名和密码:

https://winscp.net/eng/download.php

答案 4 :(得分:0)

我有一个客户端-服务器系统,它从应用服务器文件夹中指定的文件夹中检索文件名,然后在客户端中显示缩略图。 客户端:(slThumbnailNames 是一个字符串列表) == 在服务器端 === 一个 TIDCmdTCPServer 有一个 CommandHandler GetThumbnailNames(一个命令处理程序是一个过程)

提示:sMFFBServerPictures 是在应用服务器的 oncreate 方法中生成的。 sThumbnailDir 从客户端传递到应用服务器。

`slThumbnailNames := funGetThumbnailNames(sThumbNailPath);
function TfMFFBClient.funGetThumbnailNames(sThumbnailPath:string):TStringList;
var
  slThisStringList:TStringList;
begin
  slThisStringList := TStringList.Create;
  dmMFFBClient.tcpMFFBClient.SendCmd('GetThumbnailNames,' + sThumbnailPath,700);
  dmMFFBClient.tcpMFFBClient.IOHandler.Capture(slThisStringList);
  result := slThisStringList;
end;

procedure TfMFFBServer.MFFBCmdTCPServercmdGetThumbnailNames(
  ASender: TIdCommand);
var
  sRec:TSearchRec;
  sThumbnailDir:string;
  i,iNumFiles: Integer;
begin
  try
    ASender.Response.Clear;
    sThumbnailDir := ASender.Params[0];
    iNumFiles := FindFirst(sMFFBServerPictures + sThumbnailDir + '*_t.jpg', faAnyfile, SRec );
    if iNumFiles = 0 then
    try
      ASender.Response.Add(SRec.Name);

      while iNumFiles = 0 do
      begin
        if (SRec.Attr and faDirectory <> faDirectory) then
          ASender.Response.Add(SRec.Name);
        iNumFiles := FindNext(SRec);
      end;
    finally
      FindClose(SRec)
    end
    else
      ASender.Response.Add('NO THUMBNAILS');
  except
  on e:exception do
  begin
    messagedlg('Error in procedure TfMFFBServer.MFFBCmdTCPServercmdGetThumbnailNames'+#13+
      'Error msg: ' + e.Message,mterror,[mbok],0);
   end;
  end;
end;`