PHP, 180 bajtów
- pierwszy argument: ścieżka musi mieć ukośnik końcowy (lub ukośnik odwrotny)
- Drugi argument: domyślnie poziomie, aby
NULLi będzie interpretowany jako 0o 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
2oznacza GLOB_MARK, doda ukośnik do wszystkich nazw katalogów, podobnie jakls -F
- przez
preg_replaceucieka GLOB znaki specjalne
Mógłbym nadużywane preg_quotedo 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_quotei 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
,4096lub ,FilesystemIterator::SKIP_DOTSprzed, ),1aby pominąć kropki (+5) ( ls -A)
- flaga
1oznaczaRecursiveIteratorIterator::SELF_FIRST