Как мне найти файл, имя которого может быть длиннее, чем предполагаемое имя? - PullRequest
3 голосов
/ 13 мая 2011

Я провожу некоторое тестирование, где у меня есть много файлов, которые мне нужны для анализа данных.У нас есть соглашение об именах наших файлов, но когда-нибудь кто-нибудь добавит немного больше имени файла.Я ищу способ найти «ядро» имени и затем сохранить полное имя файла.

Например, я хочу найти 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 ]

7 голосов
/ 13 мая 2011

Функция glob выглядит так, как будто она справилась бы с задачей:

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

# Make sure you get exactly one file, open it, etc.
0 голосов
/ 14 мая 2011

В 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...