2014-03-07 99 views
-1

在Perl中,給出了兩個或多個基本目錄,我需要找到.cpp.hpp.h.c擴展名的文件,並生成完整路徑像Windows查找工具。生成帶的.cpp,.HPP,h文件名的完整路徑,擴展名爲.c

例如,說 我有兩個或多個基本目錄

C:\foo\bar\ 
C:\foo\bar\barbar 

,我需要生成給定的基本目錄的.cpp.hpp.h.c文件名的完整路徑。

這些文件可能存在C:\foo\bar\bar\foo\bar\foo\,但我知道只有少數基目錄上面

+2

http://search.cpan.org/~rjbs/perl-5.18.2/lib/File/Find.pm –

回答

1
use File::Find; 

find(\&print_names, ('thisdir/one/', 'thatdir/two')); 

sub print_names { 
    my $name = $File::Find::name; 
    print "$name\n"if $name =~ /\.(cpp|hpp|h|c)$/; 
} 
+1

偉大的工作,謝謝。 – user3392184

+1

是的,File :: Find是跨平臺的。 – Axeman

+0

感謝您的評論 - 我編輯了答案,刪除了我未在其中進行測試的免責聲明,以免在未來的讀者中引入不必要的疑問。 – msouth

1

給出要轉換使用混合前後斜線,你需要使用File::Spec模塊的文件路徑。包裝模塊使它稍微整齊一些,以調用它包含的功能。

試試這個

use strict; 
use warnings; 

use File::Find; 
use File::Spec::Functions qw/canonpath/; 

find(sub { 
    print canonpath($File::Find::name), "\n" if -f and /\.[ch](?:pp)?$/; 
}, qw{ C:\foo\bar\ C:\foo\bar\barbar }); 
相關問題