나는 Perl에서 디렉토리의 일반 파일을 나열하는 방법을 찾고있다. 파일 만, 디렉토리는 없습니다.Perl을 사용하여 디렉토리에 일반 파일 목록 만 표시하려면 어떻게합니까?
답변
당신은 -f
파일 테스트 연산자와 함께 opendir
, readdir
및 closedir
기능을 사용해야합니다
opendir(my $dh, $some_dir) || die $!;
while(my $f = readdir $dh) {
next unless (-f "$some_dir/$f");
print "$some_dir/$f\n";
}
closedir $dh;
readdir
연산자가 필요합니다.
:
#! /usr/bin/perl
use warnings;
use strict;
my $dir = "/tmp/foo";
opendir my $dh, $dir
or die "$0: opendir: $!";
while (defined(my $name = readdir $dh)) {
next unless -f "$dir/$name";
print "$name\n";
}
그것을 실행 : 당신이 볼 수 있듯이
$ ls -F /tmp/foo a b c d/ $ ./prog.pl b c a
는, 이름이 필요하지 않다가 파일 시스템에 물리적으로 저장되어있는 순서에 나와 정렬.
당신은 또한 당신이 결과에서 디렉토리를 제거해야합니다print map { s!^.*/!!; "$_\n" }
grep !-d $_ =>
</tmp/foo/*>;
주에서와 글로브 연산자를 사용할 수있는, 더러운 빠른 및-경로를 이동하려면, 그리고 글로브 연산자는하지 않습니다 이름이 점으로 시작하는 파일을 리턴합니다.
사용 File::Find. 그것은 핵심 모듈입니다.
use File::Find;
find(\&wanted, @directories_to_search);
sub wanted
{
my $file = shift;
return unless (-f $file);
#process file
}
디렉토리에있는 모든 파일을 나열하는 또 다른 방법은 CPAN 모듈 File::Slurp에서 read_dir
기능을 사용하는 것입니다
use strict;
use warnings;
use File::Slurp qw(read_dir);
my $dir = './';
my @files = grep { -f } read_dir($dir);
그것은 당신을 위해 검사를했던 opendir 수행합니다. "숨겨진"파일 (점으로 시작하는 파일)이 포함됩니다. 이것은 지정된 디렉토리의 서브 디렉토리에있는 파일을 재귀 적으로 나열하지 않습니다.
CPAN에서File::Find::Rule는이 완전히 사소한 수 있습니다 :
use File::Find::Rule;
my @files = File::Find::Rule->file->in($directory);
이 지정된 디렉토리 또는 하위 디렉토리의 모든 파일을 찾습니다. 나는 극도의 유연성과 단순성의 결합 때문에 이것을 추천한다.
다음과 같은 경로에있는 모든 파일을 찾을 수 있습니다 : a/**/**/b/**/c.txt – yarian
확실! 파일 다음에 name() 호출을 추가하기 만하면되지만 Unix 스타일의 와일드 카드 (단일 별표)를 사용해야합니다. 이름 ('. * something [A-Z]. * \. foo')을 원하면 정규 표현식을 사용할 수도 있습니다. 그래서 예제 파일을 찾기 위해 File :: Find :: Rule-> file-> name ('a/*/*/b/*/c.txt') -> ($ directory)라고 말할 수 있습니다. –
- 1. PHP 오류 만 표시하려면 어떻게합니까?
- 2. 어떻게 perl을 사용하여 디렉토리에 cd합니까?
- 3. WPF에서 화면에 적합한 목록 항목 만 표시하려면 어떻게합니까?
- 4. HTML 찾아보기 단추를 사용하여 이미지 만 필터링하고 표시하려면 어떻게합니까?
- 5. 텍스트 상자에 대문자 만 표시하려면 어떻게합니까?
- 6. Perl을 사용하여 파일 다운로드
- 7. Magento - 제품에 지정된 속성 만 표시하려면 어떻게합니까?
- 8. Perl을 사용하여 파일 이름 얻기
- 9. Perl을 사용하여 XML 파일 수정
- 10. 현재 폴더 파일 목록 만?
- 11. Perl을 사용하여 디렉토리의 모든 파일을 나열하려면 어떻게합니까?
- 12. 자바 스크립트 만 사용하여 디렉토리의 파일 목록 표시
- 13. webgl에서 texSubImage2D를 사용하여 스프라이트를 표시하려면 어떻게합니까?
- 14. Perl을 사용하여 Tk의 목록 상자에 명령 추가
- 15. 배열 목록 perl을 추가합니다
- 16. RadioButtonListPrint를 테이블에 표시하려면 어떻게합니까?
- 17. jLabel에 String을 표시하려면 어떻게합니까?
- 18. MSBuild를 사용하여 파일을 다른 디렉토리에 복사하려면 어떻게합니까?
- 19. PHP에서 조건을 사용하여 텍스트를 강조 표시하려면 어떻게합니까?
- 20. ASP.NET을 사용하여 hierarical 데이터를 표시하려면 어떻게합니까?
- 21. LDAP를 사용하여 연락처를 만들고이를 GAL에 표시하려면 어떻게합니까?
- 22. ICSharpCode.TextEditor.TextEditorControl을 사용하여 구문 오류를 강조 표시하려면 어떻게합니까?
- 23. 일반 목록 목록
- 24. C# 그룹화/일반 목록 정렬 LINQ를 사용하여
- 25. WPFToolkit DatePicker를 선택한 날짜 만 강조 표시하려면 어떻게합니까?
- 26. A, B, C 등으로 시작하는 항목 만 표시하려면 어떻게합니까?
- 27. 목록 일반 파일 유일한 문제 (디렉토리없이)
- 28. django : 일반 목록보기에 일반 모델을 표시하려면 어떻게해야합니까?
- 29. Perl을 사용하여 코어에 프로세스 할당
- 30. QuickLook에서 오프라인 파일을 표시하려면 어떻게합니까?
File :: Find는 내 의견으로는 더 일반적이며 더 나은 대답입니다. –
전체 트리의 깊이 우선 탐색을 원하지 않는다면, File :: Find는 찾고있는 드로이드가 아닙니다. –