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