2015-04-02 48 views
0

如何列出multilpe dirs的父目錄和子目錄中的所有文件?如何列出目錄中的所有文件

$dir="/home/httpd/cgi-bin/r/met"; 

    opendir(DIR,"/home/httpd/cgi-bin/r/met")||die"error"; 

    while($line=readdir DIR) 
    { 

    print"$line\n"; 

    opendir DIR1,"$dir/$line"||die"error"; 

     while($line1=readdir DIR1) 
     { 
     print"$line1\n"; 
     } 
    } 
    closedir DIR; 
    closedir DIR1; 
+0

因此,如果我得到它的權利,你有一個目錄的列表,你想從哪裏獲取所有文件?或者你想獲得所有文件與子目錄的? – Rizier123 2015-04-02 08:48:45

+1

認爲你在爲你的方法進行遞歸調用。哪種語言的Perl或PHP爲什麼標記字符串正則表達式和字符串比較? – Jens 2015-04-02 08:50:51

+0

我需要perl語言的答案 – ipog 2015-04-02 08:54:23

回答

4

不要這樣做,請改用File::Find

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

my $search = "/home/httpd/cgi-bin/r/met"; 

sub print_file_names { 
    print $_,"\n"; 
} 

find (\&print_file_names, $search); 
+0

它是否會支持父文件夾中的所有文件和多個文件夾的子目錄 – ipog 2015-04-02 08:57:56

+0

是的,它會完全遍歷目錄結構。 – Sobrique 2015-04-02 12:44:35

+0

'$ _'會給你當前的文件名(基本名稱)。如果你需要完整路徑,使用'$ File :: Find :: name'。如果因爲某種原因需要當前目錄,請使用'$ File :: Find :: dir'。 – 2015-04-02 16:35:37

0

File::Find有效地通過目錄列表散步和執行由您爲每個文件或目錄遞歸低於起始目錄中定義的子程序。調用默認情況下更改目錄中的子程序find(由File::Find模塊導出的函數)之前被掃描並設置以下(全局)變量:

  • $File::Find::dir - 訪問目錄路徑相對於起始目錄
  • $File::Find::name - 被訪問(在我的例子中)的文件的基本名稱
- 文件的完整路徑是相對於起始目錄
  • $_訪問

    解決你的問題的一種方法是:

    #!/usr/bin/perl 
    # Usage: ffind [dir1 ...] 
    use strict; use warnings; 
    use 5.010; # to be able to use say 
    use File::Find; 
    
    # use current working directory if no command line argument 
    @ARGV = qw(.) unless @ARGV; 
    
    find(sub { say if -f }, @ARGV); 
    
  • 相關問題