PHP, 180 byte
- đối số đầu tiên: đường dẫn phải có dấu gạch chéo (hoặc dấu gạch chéo ngược)
- đối số thứ hai: mức mặc định đến
NULL
và sẽ được hiểu là 0
bởi str_repeat
; sẽ đưa ra cảnh báo nếu không được cung cấp
function d($p,$e){$s=opendir($p);echo$b=str_repeat("\t",$e++),$e?basename($p)."/":$p,"
";while($f=readdir($s))echo preg_match("#^\.#",$f)?"":is_dir($p.$f)?d("$p$f/",$e):"$b\t$f
";}
- hiển thị các tập tin ẩn và thư mục, nhưng không recurse thư mục ẩn
thêm ngoặc xung quanh is_dir(...)?d(...):"..."
để loại bỏ các mục ẩn từ đầu ra (2)
thay thế "#^\.#"
với #^\.+$#
màn hình hiển thị / recurse mục ẩn nhưng skip dot mục (+2)
- có thể ném lỗi khi các thư mục được lồng quá sâu. Chèn
closedir($s);
trước trận chung kết }
để sửa (+13)
- sẽ thất bại nếu một thư mục chứa mục không có tên, hãy thêm vào
false!==
điều kiện while để sửa (+8)
với toàn cầu, 182 byte (có thể là 163 trong php tương lai)
function g($p,$e){echo$b=str_repeat("\t",$e),$e++?basename($p)."/":$p,"
";foreach(glob(preg_replace("#[*?[]#","[$1]",$p)."*",2)as$f)echo is_dir($f)?g($f,$e):"$b\t".basename($f)."
";}
- không hiển thị hoặc lặp lại các tập tin / thư mục ẩn
2
là viết tắt của GLOB_MARK
, sẽ thêm một dấu gạch chéo vào tất cả các tên thư mục, cũng nhưls -F
- các
preg_replace
nhân vật đặc biệt thoát khỏi thế giới
mà tôi có thể đã lạm dụng preg_quote
cho việc này (-19); nhưng điều đó sẽ thất bại trên các hệ thống Windows, vì dấu gạch chéo ngược là dấu phân cách thư mục ở đó.
- php có thể sớm bao gồm một hàm global_quote , sẽ cho phép chơi golf giống như
preg_quote
và hoạt động trên tất cả các hệ thống.
với các trình vòng lặp, 183 byte
(tốt, không hoàn toàn là các trình vòng lặp: Tôi đã sử dụng ngầm SplFileInfo::__toString()
cho golf $f->getBaseName()
và $f->isDir()
các hàm PHP 4 cũ.)
function i($p){echo"$p
";foreach($i=new RecursiveIteratorIterator(new RecursiveDirectoryIterator($p),1)as$f)echo str_repeat("\t",1+$i->getDepth()),basename($f),is_dir($f)?"/":"","
";}
- không cần dấu gạch chéo
- hiển thị và đệ quy các mục ẩn (
ls -a
)
- chèn
,4096
hoặc ,FilesystemIterator::SKIP_DOTS
trước ),1
để bỏ qua các mục chấm (+5) ( ls -A
)
- cờ
1
là viết tắt củaRecursiveIteratorIterator::SELF_FIRST