2011-05-13 75 views
3

我正在做一些测试,其中有很多需要执行数据分析的文件。我们对文件有一个命名约定,但有时候会有人向文件名添加一些内容。我正在寻找一种方法来查找名称的“核心”,然后保存整个文件名。如何找到名称可能比预定名称更长的文件?

例如,我想找到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 

回答

7

glob功能好像它会做的伎俩:

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

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

如果我想在WIRA_Rabcd前添加一个变量$ dir(目录)怎么办? – Lpaulson 2011-05-13 20:59:49

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 
相关问题