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