문제

Perl의 현재 디렉토리의 모든 하위 디렉토리를 통과하려고 노력하고 해당 파일에서 데이터를 얻으려고합니다. 주어진 디렉토리에서 모든 파일과 폴더 목록을 얻기 위해 Grep을 사용하지만 반환 된 값 중 어느 것이 폴더 이름이고 파일 확장이없는 파일인지는 모르겠습니다.

차이점을 어떻게 알 수 있습니까?

도움이 되었습니까?

해결책

당신은 a를 사용할 수 있습니다 -디 테스트 연산자가 디렉토리인지 확인하십시오. 다음은 일반적으로 유용한 파일 테스트 연산자입니다.

    -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 매뉴얼 페이지입니다

또한 사용해보십시오 파일 :: 찾기 디렉토리를 재발 할 수 있습니다. 다음은 디렉토리를 찾는 샘플입니다 ....

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

find(\&wanted, $mydir);

다른 팁

print "$file is a directory\n" if ( -d $file );

-X 연산자를보십시오.

perldoc -f -X

디렉토리 트래버스의 경우 파일 :: 찾기 또는 마조히스트가 아닌 경우 내 파일을 사용하여 반복자를 만들고 미친 콜백이 필요하지 않습니다. 실제로, 당신은 파일을 가질 수 있습니다 :: 다음 반환 파일과 디렉토리를 무시할 수 있습니다.

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

my @files = grep { -f } @all;
my @dirs = grep { -d } @all;
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
    }
}

사용하기가 더 쉬울 것입니다 File::Find.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top