Как мне найти определенный файл в каталоге, используя Perl? - PullRequest
0 голосов
/ 08 сентября 2010

У меня есть файл в каталоге, и я хочу выбрать один конкретный файл из каталога за раз.

Код указан ниже:

$xml_file_name = <STDIN>;
chomp ($xml_file_name);

@o = file_search($xml_file_name);
print "file::@o\n";

sub file_search
{
    opendir (DIR, "/home/sait11/Desktop/test/Test cases") or die "Failed to open directory\n";
    @dirs_found = grep { /$xml_file_name/ } readdir DIR;
    closedir (DIR);
#   print "dir ::@dirs_found\n";
    return @dirs_found;
}

Я ввожу имя файла, которое будет возвращено как sample.xml. Но в переменной @dirs_found сохраняются все имена файлов, начинающиеся с 's'.

Как узнать точный файл за раз?

Ответы [ 2 ]

8 голосов
/ 08 сентября 2010

Чтобы найти определенный файл, просто откройте файл или запустите проверку файла:

my $file = "/home/sait11/Desktop/test/Test cases/$xml_file_name";

print "$file found\n" if -f $file;

Запуск вашего кода, это, кажется, работает. Если вы вводите шаблон, то он правильно выбирает имена файлов из целевого каталога, которые соответствуют тому, что вы вводите в Perl регулярное выражение. Какое имя вы искали?

Если вы измените grep на:

my @dirs_found = grep { /^$xml_file_name$/ } readdir DIR;

тогда он исключит значения, в которых регулярное выражение не соответствует полному имени. С другой стороны, вы отказываетесь от некоторой гибкости, когда делаете это.

0 голосов
/ 08 сентября 2010

Получил ответ, мне нужно дать полное имя файла, чтобы оно совпадало только с этим конкретным файлом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...