【问题标题】:How do I find a file whose name may be longer than the intended name?如何找到名称可能比预期名称长的文件?
【发布时间】:2011-08-25 04:36:57
【问题描述】:

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

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

【问题讨论】:

    标签: regex perl file search


    【解决方案1】:

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

    my $dir = '/some/directory/';
    my @files = glob($dir . '*WIRA_Rabcd_RT.txt');
    
    # Make sure you get exactly one file, open it, etc.
    

    【讨论】:

    • 如果我想在 WIRA_Rabcd 前面添加一个变量 $dir(目录)怎么办?
    【解决方案2】:

    在 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
    

    【讨论】:

      猜你喜欢
      • 2022-12-05
      • 2023-03-31
      • 2021-12-09
      • 2019-04-05
      • 2019-06-11
      • 2023-01-27
      • 2021-02-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多