Perl-скрипт для рекурсивного перечисления всех имен файлов в каталоге - PullRequest
11 голосов
/ 09 марта 2011

Я написал следующий скрипт на Perl, но проблема в том, что он всегда входит в другую часть и сообщает не файл. У меня есть файлы в каталоге, которые я даю на входе. Что я тут не так делаю?

Мое требование - рекурсивно посещать каждый файл в каталоге, открывать его и читать в виде строки. Но первая часть логики терпит неудачу.

#!/usr/bin/perl -w
use strict;
use warnings;
use File::Find;

my (@dir) = @ARGV;
find(\&process_file,@dir);

sub process_file {
    #print $File::Find::name."\n";
    my $filename = $File::Find::name;
    if( -f $filename) {
        print " This is a file :$filename \n";
    } else {
        print " This is not file :$filename \n";
    }
}

1 Ответ

20 голосов
/ 09 марта 2011

$File::Find::name дает путь относительно исходного рабочего каталога.Однако File :: Find продолжает изменять текущий рабочий каталог, если вы не укажете его иначе.

Либо используйте параметр no_chdir, либо используйте -f $_, который содержит только часть имени файла,Я рекомендую первое.

#!/usr/bin/perl -w
use strict; 
use warnings;
use File::Find;

find({ wanted => \&process_file, no_chdir => 1 }, @ARGV);

sub process_file {
    if (-f $_) {
        print "This is a file: $_\n";
    } else {
        print "This is not file: $_\n";
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...