Perl在文件系统中搜索 - 在Web上显示结果

时间:2014-10-27 06:51:19

标签: perl

大家好日子, 我根本不是程序员,所以我非常感谢你的帮助。 我有一个服务器,用于保存以下目录结构中的文件:

/usr/httpd/htdocs/statements

在这个语句目录下,我有很多子目录: ab, ac, ad等。这些是指不同的网站。 在这些网站下我有目录,基本上是年和月的格式

201101
201102

这些目录中有很多包含.body扩展名的文件。这种文件的典型示例是:

S117873000.body
S117873000x.body

我有一个网络界面,用户可以在其中输入要搜索的数字,例如:S117873000

HTML搜索:

    print "</select></td><td>
                <form method=POST action=/cgi-bin/search.pl>
                enter a number to search for:
                <input type=text name=query size=15>
                </td></tr><tr><td colspan=2><center><input type=submit value=Search <input type=reset>
                </center></form></td></tr>\n";

我尝试编写一些perl来递归搜索这些目录,并在他可以点击的链接中显示用户的结果。我已经删除了我尝试过的大部分内容,因此以下内容不会显示太多内容。我需要从网络搜索中提取参数,递归搜索匹配的数字并显示一个链接。

search.pl

#!/usr/bin/perl -w
use CGI qw(:standard);
use strict;
use warnings;
use File::Find;
my $dirs = '/usr/httpd/htdocs/statements/';
## Collect the value of 'query' submitted by the webpage
my $cgi = new CGI;
my $query=$cgi->param('query');

find( sub
{}
'$dirs');


sub return_html {
   print "Content-type: text/html\n\n";
   print "<html>\n <head>\n  <title>Results of Search</title>\n </head>\n";
   print "<ul>\n";

   print "<li><a href=\......\n";
}

2 个答案:

答案 0 :(得分:0)

my $query = $cgi->param('query');
print header;
use vars qw/*name *dir *prune/;
*name   = *File::Find::name;
*dir    = *File::Find::dir;
*prune  = *File::Find::prune;
find ( sub
{
  print 'Results:';
  /$query/ && print $name . "\n";
}, $dirs);

这应该有效或类似的东西

答案 1 :(得分:0)

我设法让它使用下面的代码。我只需要用超链接显示结果,以便用户可以点击它。目前,它在一行中显示所有结果,没有超链接。 /usr/httpd/htdocs/statements/ec/200501/T047906000x.body /usr/httpd/htdocs/statements/ec/200501/T047906000.body

有关如何使用可点击的超链接显示结果的任何想法吗?

&#13;
&#13;
#!/usr/bin/perl -w
use CGI qw(:standard);
use strict;
use warnings;
use File::Find;
my $dir = '/usr/httpd/htdocs/statements/';
## Collect the value of 'query' submitted by the webpage
my $cgi = new CGI;
my $query=$cgi->param('query');

print header();
print start_html();


# for the convenience of &wanted calls, including -eval statements:
use vars qw/*name *dir *prune/;
*name   = *File::Find::name;
*dir    = *File::Find::dir;
*prune  = *File::Find::prune;

#sub wanted;


# Traverse desired filesystems
File::Find::find({wanted => \&wanted}, '/usr/httpd/htdocs/statements/');
exit;


sub wanted {
    /^$query.*\z/s &&
    print("$name\n");
}

print end_html()
&#13;
&#13;
&#13;