如何查找名称可能比预期名称长的文件?

时间:2011-05-13 19:05:27

标签: regex perl file search

我正在做一些测试,我需要执行大量文件才能执行数据分析。我们的文件有一个命名约定,但有时会有人添加一些文件名。我正在寻找一种方法来查找名称的“核心”,然后保存整个文件名。

例如,我想查找WIRA_Rabcd_RT,但有人可能已将文件名保存为RED_GREEN_BLUE_WIRA_Rabcd_RT.txt,因此我的文件夹将如下所示:

RED_GREEN_BLUE_WIRB_Rabcd_RT.txt
RED_GREEN_BLUE_WIRC_Rabcd_RT.txt
RED_GREEN_BLUE_WIRA_Rabcd_RT.txt ← I want to find this file, and open it.
RED_GREEN_BLUE_WIRF_Rabcd_RT.txt
RED_GREEN_BLUE_WIRG_Rabcd_RT.txt
RED_GREEN_BLUE_WIRT_Rabcd_RT.txt
RED_GREEN_BLUE_WIRW_Rabcd_RT.txt
RED_GREEN_BLUE_WIRQ_Rabcd_RT.txt

2 个答案:

答案 0 :(得分:7)

glob函数似乎可以解决问题:

my $dir = '/some/directory/';
my @files = glob($dir . '*WIRA_Rabcd_RT.txt');

# Make sure you get exactly one file, open it, etc.

答案 1 :(得分:0)

在Perl TIMTOWTDI中,这是另一种方式:

#!/usr/bin/perl

use strict;
use warnings;

my $dir = 'dirname';
my $pattern = 'WIRA_Rabcd_RT';

my @files;

{ 
  opendir my $dir_handle, $dir;
  @files = grep { /$pattern/ } readdir $dir_handle;
} #end-of-block autocloses lexical $dir_handle 

@files现在包含目录中与模式匹配的文件名。请注意,名称是相对于该目录的(存储为name而不是dir/name)。然后我经常使用File::chdir模块将工作目录更改为$dir以处理这些文件。例如:

use File::chdir

# get @files in $dir as above...

{
  local $CWD = $dir;
  # work with files in @files
} 

# working directory restored to original here