大家好,我想知道如何在perl中搜索文件。
现在我有一行信息,我用tab标记为存储在数组中的分隔符。 (使用拆分)这些数组包含我想在目录中搜索的文件名的存根文本。例如,Engineering_4.txt就是我的数组中的“Engin”。
如果有两个不同的文件...... Engineering_4和Engineering_5,它会在这两个文件中搜索内容,只从其中一个中提取我需要的信息(只有1个包含我想要的信息)。我想我的脚本必须搜索和存储匹配的所有文件名,然后搜索每个文件。
我的问题是如何在与Perl中的正则表达式匹配的目录中搜索文件?还有一种方法可以限制我要搜索的文件类型。例如,我只想搜索“.txt”文件。
谢谢大家
答案 0 :(得分:4)
我猜你已经知道了这个目录,你可以打开它并阅读它同时过滤它:
opendir D, 'yourDirectory' or die "Could not open dir: $!\n";
my @filelist = grep(/yourRegex/i, readdir D);
答案 1 :(得分:0)
您可以使用<glob>
运算符的glob
函数执行此操作。
while (<Engin*.txt>) {
print "$_\n";
}
答案 2 :(得分:0)
glob
函数在提供通配符表达式时返回匹配文件的数组。
这意味着在处理之前文件也可以是sort
:
use Sort::Key::Natural 'natsort';
foreach my $file ( natsort glob "*.txt" ) { # Will loop over only txt files
open my $fh, '<', $file or die $!; # Open file and process
}
答案 3 :(得分:0)
您还可以使用File :: Find模块:
#!/usr/bin/env perl
use strict;
use warnings;
use File::Find;
my @dirs = @ARGV ? @ARGV : ('.');
my @list;
find( sub{
push @list, $File::Find::name if -f $_ && $_ =~ m/.+\.txt/ },
@dirs );
print "$_\n" for @list;