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