PHP, 180 байт
- перший аргумент: шлях повинен мати кінець косої риски
- Другий аргумент: по замовчуванням на рівні до
NULLі буде інтерпретуватися як 0шляхом str_repeat; винесе попередження, якщо воно не передбачено
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
";}
- відображає приховані файли і папки, але не рекурсією прихованих каталогів
додати в круглих дужках , is_dir(...)?d(...):"..."щоб видалити приховані записи з виходу (+2)
замінити "#^\.#"з #^\.+$#на дисплей / рекурсії прихованих записів , але пропустити точку записи (+2)
- може видаляти помилки, коли каталоги вкладені занадто глибоко. Вставити
closedir($s);перед фіналом, }щоб виправити (+13)
- не вдасться, якщо каталог містить запис без імені, додайте
false!==умову while, щоб виправити (+8)
з glob, 182 байти (можливо, 163 у майбутньому 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)."
";}
- не відображає та не повторює приховані файли / каталоги
2розшифровується GLOB_MARK, додасть косу рису до всіх імен каталогів, як іls -F
preg_replaceвислизає Глоб спеціальні символи
Я міг би зловживали preg_quoteдля цього (-19); але це не вдасться в системах Windows, оскільки зворотна косої риби є роздільником каталогів там.
- php може незабаром включити функцію glob_quote , яка дозволить робити те саме гольф, що
preg_quoteі робота у всіх системах.
з ітераторами, 183 байти
(ну не суто ітератори: я використовувався неявно SplFileInfo::__toString()для гольфу $f->getBaseName()та $f->isDir()для старих функцій 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)?"/":"","
";}
- не потрібна косою косою рисою
- відображає та повторює приховані записи (
ls -a)
- вставити
,4096або ,FilesystemIterator::SKIP_DOTSраніше, ),1щоб пропустити крапки (+5) ( ls -A)
- прапор
1означаєRecursiveIteratorIterator::SELF_FIRST