Отфильтруйте имена файлов шаблоном

Вам необходимо указать путь к библиотекам, используемым при компиляции кода Scala. Обычно это делается не вручную, а с помощью инструмента сборки, такого как Maven или sbt. Вы можете найти минимальную установку sbt на http://spark.apache.org/docs/1.2.0/quick-start.html#self-contained-applications

7
задан Ether 11 October 2009 в 04:08
поделиться

6 ответов

попробуйте

@files = grep {!/\.xh$/} <$MYDIR/abc*>;

, где MYDIR - это строка, содержащая путь к вашему каталогу.

7
ответ дан 6 December 2019 в 11:52
поделиться

opendir (MYDIR, $ newpath); мой @files = grep (/ abc *. * /, readdir (MYDIR)); #DOES NOT WORK

Вы путаете шаблон регулярного выражения с шаблоном глобуса.

#!/usr/bin/perl

use strict;
use warnings;

opendir my $dir_h, '.'
    or die "Cannot open directory: $!";

my @files = grep { /abc/ and not /\.xh$/ } readdir $dir_h;

closedir $dir_h;

print "$_\n" for @files;
7
ответ дан 6 December 2019 в 11:52
поделиться
foreach $file (@files)
{
    my $fileN = $1 if $file =~ /([^\/]+)$/;

    if ($fileN =~ /\.xh$/)
    {
          unlink $file;
          next;
    }
    if ($fileN =~ /^abc/)
    {
          open(FILE, "<$file");
          while(<FILE>)
          {
             # read through file.
          }
    }
 }

также, все файлы в каталоге можно получить, выполнив:

$DIR = "/somedir/somepath";
foreach $file (<$DIR/*>)
{
  # apply file checks here like above.
}

В качестве альтернативы вы можете использовать модуль Perl File :: find.

-1
ответ дан 6 December 2019 в 11:52
поделиться

Вместо использования opendir и фильтрации readdir (не забудьте closedir !), Вы можете вместо этого использовать glob :

use File::Spec::Functions qw(catfile splitpath);

my @files =
    grep !/^\.xh$/,                # filter out names ending in ".xh"
    map +(splitpath $_)[-1],       # filename only
    glob                           # perform shell-like glob expansion
        catfile $newpath, 'abc*';  # "$newpath/abc*" (or \ or :, depending on OS)

Если вы не заботитесь об удалении $ newpath с префиксом к результатам glob , избавьтесь от карты + разделенный путь .

-1
ответ дан 6 December 2019 в 11:52
поделиться
opendir(MYDIR, $newpath) or die "$!";
my @files = grep{ !/\.xh$/ && /abc/ } readdir(MYDIR);
close MYDIR;
foreach (@files) { 
   do something
}
3
ответ дан 6 December 2019 в 11:52
поделиться

Смысл, который используют kevinadc и Синан Унур, но не упоминают, заключается в том, что readdir () возвращает список всех записей в каталоге при вызове в контексте списка. Затем вы можете использовать для этого любой оператор списка. Вот почему вы можете использовать:

my @files = grep (/abc/ && !/\.xh$/), readdir MYDIR;

Итак:

readdir MYDIR

возвращает список всех файлов в MYDIR.

И:

grep (/abc/ && !/\.xh$/)

возвращает все элементы, возвращенные readdir MYDIR , которые соответствуют критериям там.

2
ответ дан 6 December 2019 в 11:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: