返回服务器上最新文件的链接到目录列表?

时间:2011-01-20 19:03:52

标签: perl file

我想制作一个irssi脚本,它会注意到服务器上的新文件,但首先我需要一个Perl脚本,它将返回服务器上的最新文件(带有目录列表的apache 2.2.16)并在下一个脚本运行之后如果没有更新的文件,则previous返回null,或者如果服务器上有新文件,则返回该文件的链接。谢谢你的帮助。

1 个答案:

答案 0 :(得分:2)

  • 记住脚本在变量$start_time

    中的开始时间

    稍后您将需要以某种持久方式(缓存,文件,持久会话数据,数据库/ DBM文件)存储“上次运行时间”。

  • 让脚本生成您想要的文件列表(如果它只是给定目录中的文件,则使用glob();如果在目录结构中递归,则使用File::Find

    < / LI>
  • 对于每个文件,通过stat调用

  • 查找其创建或修改(您想要的任何一个)时间戳
  • 使用stat数据查找最新文件。如果您使用glob列出文件,请通过扫描列表来执行此操作;如果File::Find,只需将其作为回忆的一部分,记住“迄今为止见过的最新文件”

  • 检索“上次运行时间”持久数据

  • 如果找到的最后一个文件晚于“上次运行时间”,则返回该文件的链接。如果没有,则返回null

  • 将脚本的开始时间($start_time)保存为“上次运行时间”的新值,以选择撕掉它。


<强>更新

如果文件列表不是本地的(例如在Web服务器上),则需要替换glob步骤以列出文件(以及stat以获取时间戳),并抓取相应的HTML包含目录列表的页面(使用例如WWW::Mechanize来检索页面,使用HTML::TwigHTML::Parser来解析HTML并检索文件名和时间戳。还有专门用于读取HTML内容的模块如果CPAN有一个模块可以解析专门的Apaches文件列表HTML,我就不会感到惊讶。


<强> UPDATE2

看起来我的预感是正确的,并且有一个可能的模块来解析mod_autoindex的HTML输出:File::Listing::apachelibwww-perl发布的一部分)