Как я отличаю файл от каталога в Perl?

19
задан Peter Mortensen 4 September 2013 в 07:27
поделиться

6 ответов

Можно использовать тестовый оператор файла-d , чтобы проверить, является ли что-то каталогом. Вот некоторые обычно полезные тестовые операторы файла

    -e  File exists.
    -z  File has zero size (is empty).
    -s  File has nonzero size (returns size in bytes).
    -f  File is a plain file.
    -d  File is a directory.
    -l  File is a symbolic link.

, Видят perlfunc страница руководства для больше

кроме того, пытаются использовать File::Find , который может рекурсивно вызвать каталоги для Вас. Вот образец, который ищет каталоги....

sub wanted {
     if (-d) { 
         print $File::Find::name." is a directory\n";
     }
}

find(\&wanted, $mydir);
31
ответ дан 30 November 2019 в 01:59
поделиться

Посмотрите на-X операторы:

perldoc -f -X

обход каталога For, используйте File::Find, или, если Вы не мазохист, используйте мой модуль File::Next, который делает итератор для Вас и не требует сумасшедших обратных вызовов. На самом деле у Вас может быть File::Next, ТОЛЬКО возвращают файлы и игнорируют каталоги.

use File::Next;

my $iterator = File::Next::files( '/tmp' );

while ( defined ( my $file = $iterator->() ) ) {
    print $file, "\n";
}

# Prints...
/tmp/foo.txt
/tmp/bar.pl
/tmp/baz/1
/tmp/baz/2.txt
/tmp/baz/wango/tango/purple.txt

Это в http://metacpan.org/pod/File::Next

10
ответ дан 30 November 2019 в 01:59
поделиться
print "$file is a directory\n" if ( -d $file );
21
ответ дан 30 November 2019 в 01:59
поделиться
my @files = grep { -f } @all;
my @dirs = grep { -d } @all;
5
ответ дан 30 November 2019 в 01:59
поделиться
my $dh = opendir(".");
my @entries = grep !/^\.\.?$/, readdir($dh);
closedir $dh;

foreach my $entry (@entries) {
    if(-f $entry) {
        # $entry is a file
    } elsif (-d $entry) {
        # $entry is a directory
    }
}
4
ответ дан 30 November 2019 в 01:59
поделиться

Было бы легче использовать File::Find.

2
ответ дан 30 November 2019 в 01:59
поделиться
Другие вопросы по тегам:

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