PHP, 180 bajtów
- pierwszy argument: ścieżka musi mieć ukośnik końcowy (lub ukośnik odwrotny)
- Drugi argument: domyślnie poziomie, aby
NULL
i będzie interpretowany jako 0
o str_repeat
; wyśle ostrzeżenie, jeśli nie zostanie podane
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
";}
- wyświetla ukrytych plików i katalogów, ale nie recurse ukrytych katalogów
dodać nawiasy wokół is_dir(...)?d(...):"..."
aby usunąć ukryte dane z wyjścia (+2)
zastąpić "#^\.#"
ze #^\.+$#
na wyświetlaczu / recurse ukryte wpisy ale pominąć kropka wpisy (+2)
- może generować błędy, gdy katalogi są zagnieżdżone zbyt głęboko. Wstaw
closedir($s);
przed finałem }
do naprawy (+13)
- zakończy się niepowodzeniem, jeśli katalog zawiera pozycję bez nazwy, należy
false!==
przejść do warunku while, aby to naprawić (+8)
z glob, 182 bajty (prawdopodobnie 163 w przyszłości php)
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)."
";}
- nie wyświetla ani nie rekursuje ukrytych plików / katalogów
2
oznacza GLOB_MARK
, doda ukośnik do wszystkich nazw katalogów, podobnie jakls -F
- przez
preg_replace
ucieka GLOB znaki specjalne
Mógłbym nadużywane preg_quote
do tego (-19); ale to się nie powiedzie w systemach Windows, ponieważ ukośnik odwrotny jest tam separatorem katalogu.
- php może wkrótce zawierać funkcję glob_quote , która pozwoli na taką samą grę w golfa
preg_quote
i działanie na wszystkich systemach.
z iteratorami, 183 bajtami
(cóż, nie tylko iteratorami: używałem domyślnie SplFileInfo::__toString()
do gry w golfa $f->getBaseName()
i $f->isDir()
starych funkcji PHP 4).
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)?"/":"","
";}
- końcowe ukośniki nie są wymagane
- wyświetla i cyklicznie ukryte wpisy (
ls -a
)
- wstaw
,4096
lub ,FilesystemIterator::SKIP_DOTS
przed, ),1
aby pominąć kropki (+5) ( ls -A
)
- flaga
1
oznaczaRecursiveIteratorIterator::SELF_FIRST