Perl의 디렉토리와 파일을 어떻게 구별합니까?
문제
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
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
.
제휴하지 않습니다 StackOverflow