2017-04-13 9 views
-3

テキストファイルを見つけるために複数のレベルのディレクトリをループする必要があるシナリオがあります。フォルダ内の複数レベルの繰り返しでWindows上のすべてのテキストファイルを見つける

私は、フォルダC:\Aから始めて、その中のすべてのテキストファイルを読みたいと思う。しかし、彼らは同じレベルに配置されていません。

いくつかのテキストファイルがC:\A\sample2.txt

として C:\A\A1\sample1.txt

一部

一部に配置されているC:\A\A2\A3\sample.txt

ように私は私A1A2を返し、フォルダA内のループにできていますが、私は知りたいと思いましたどのレベルにも自動的に反復し、テキストファイルとそのパスを返します。 ance!

+1

あなたは、私がこれを書いた –

+0

しようとしたコードを示しています。 のopendir(DH、$ ISF_dirを)。 my @files = readdir(DH); closedir(DH); foreach my $ file(@files) { \t \t if($ file =〜/^\.$/); \t \t次のif($ file =〜/^\.\.$/); \t \t print "$ file \ n"; \t \t \t \t if(-d $ file){#これはディレクトリですか? \t \t \t "\ n1 \ n"; \t \t} } しかし、ディレクトリをディレクトリとして検出することはありませんでした。 –

+0

投稿に入れてください、コメントではありません –

答えて

0

File::Findモジュールを使用してください。

use strict; 
use warnings 'all'; 

use File::Find 'find'; 

my @files; 

find(sub { 
    push @files, $File::Find::name if -f and /\.txt$/i; 
}, 'C:\A'); 

print "$_\n" for @files; 
+0

@downvoterコメントを追加するには、私の答えを改善してください。 :) – mkHun

0

私はFile::Find::Ruleを使用したい:

#!/usr/bin/env perl 

use strict; 
use warnings; 
use File::Find::Rule; 

my @files = File::Find::Rule -> file() 
          -> name('sample*.txt') 
          -> in ('C:\\A'); 

foreach my $file (@files) { 
    print "Found: $file\n"; 
    #process it here. 
} 
関連する問題