2012-08-30 86 views
1

我正在使用一個我不熟悉的linux機器,所以我想從它的文件夾結構中獲得一個txt打印。我記得寫了一個腳本,在php中做了類似的事情,但找不到它。我正在尋找任何以下的,可以幫助我完成這個任務:使用bash或php獲取文件夾層次結構

  • bash腳本
  • 現有的Linux命令行
  • PHP腳本
+0

你嘗試了'find'命令? – Mat

回答

4
find . -type d > dirstructure.txt 

然而,在一個典型的Linux機器上,我寧願不從目錄根目錄運行。如果你這樣做,並得到一些權限錯誤,你可以發送錯誤到/dev/null

find . -type d > dirstructure.txt 2> /dev/null 
+1

如果你不想在目錄結構中過深,添加-maxdepth#也可能很有用。要只顯示兩個級別,它將是:'find。 -maxdepth 2 -type d' – Brett

1

採取快速和骯髒的:

class Crawl_directory 
{ 
    public $exclude = array(); 
    public $paths = array(); 
    public $tree = FALSE; 
    public $tree_str = FALSE; 
    public function __construct($path, $exclude = array()) 
{ 
     if (!$path || !is_dir($path)) 
      return FALSE; 
     $this->exclude = array_merge(array(), $exclude); 
     $this->tree = $this->crawl($path); 
     $this->tree_str = $this->create_tree($this->tree); 
} 
    public function crawl($path) 
    { 
     $arr = array(); 
     $items = scandir($path); 
     $this->paths[] = $path; 
     foreach ($items as $k => $v) { 
      if (!in_array($v, $this->exclude) && $v != '.' && $v != '..') { 
       if (is_dir($path.'/'.$v)) { 
        $arr[$v] = $this->crawl($path.'/'.$v); 
       } else { 
        $arr[$v] = ''; 
       } 
      } 
     } 
     return $arr; 
    } 
    function create_tree($arr) 
    { 
     $out = '<ul>'."\n"; 
     foreach ($arr as $k => $v) { 
      $out .= '<li class="'.((is_array($v)) ? 'folder' : 'file').'">'.$k.'</li>'."\n"; 
      if (is_array($v)) { 
       $out .= $this->create_tree($v); 
      } 
     } 
     $out .= '</ul>'."\n"; 
     return $out;  
    } 
    function get_tree() 
    { 
     return $this->tree; 
     } 
    function print_tree() 
    { 
     echo $this->tree_str; 
    } 
}