Как я могу отфильтровать имена файлов по их расширению? - PullRequest
4 голосов
/ 16 февраля 2009

Следующий скрипт хранит все файлы и каталоги в массиве @file_list.

Как фильтровать только файлы с расширением .lt6 и ничем иным?

opendir (CURRDIR, $localdir);
@file_list = grep !/^\.\.?$/, readdir CURRDIR;
print STDOUT "Found Files: @file_list\n";

ура

Ответы [ 7 ]

9 голосов
/ 16 февраля 2009

Попробуйте это:

grep(/\.lt6$/i, readdir(CURRDIR))

Я использовал это много раз. Это работает, хотя сейчас я предпочитаю использовать File :: Next для такого рода вещей.

Пример:

use File::Next;

my $iter = File::Next::files( { file_filter => sub { /\.lt6$/ } }, $localdir )

while ( defined ( my $file = $iter->() ) ) {
    print $file, "\n";
}
3 голосов
/ 16 февраля 2009

Не забудьте closedir().

Ваш grep должен искать:

my(@file_list) = grep /\.lt6$/, readdir CURRDIR;

Предполагая, что остальная часть вашего синтаксиса приблизительно верна.

2 голосов
/ 17 февраля 2009
my @file_list = glob "$localdir/*.lt6";
2 голосов
/ 17 февраля 2009

Вы можете использовать Файл :: Найти :: Правило ;

use File::Find::Rule;

print "FOUND:\n    "
    , join( "\n    "
          , File::Find::Rule->file->name( '*.lt6' )->in( $path )
          )
    , "\n"
    ;
1 голос
/ 16 февраля 2009
opendir (CURRDIR, $localdir);
@file_list = grep m/\.lt6$/, readdir CURRDIR;
closedir CURRDIR;
print STDOUT "Found Files: @file_list\n";
0 голосов
/ 17 февраля 2009

Перейти к командной строке

кд \

dir / s * .lt6> mydir.txt

0 голосов
/ 16 февраля 2009

И чтобы добавить немного разнообразия, вы также можете делать такие вещи:

opendir(DIR, $path) || die qq([ERROR] Cannot opendir "$path" - $!\n);
my(@txt) = grep(m{\.txt$}, readdir DIR);
rewinddir DIR;
my(@lt6) = grep(m{\.lt6$}, readdir DIR);
rewinddir DIR;
my(@dirs) = grep(-d "$path/$_", readdir DIR);
closedir DIR;

и т. Д.

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