PHP, 180 bytes
- primeiro argumento: o caminho deve ter uma barra final (ou barra invertida)
- segundo argumento: o nível padrão é
NULLe será interpretado como 0por str_repeat; emitirá um aviso se não for fornecido
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
";}
- exibe arquivos e diretórios ocultos, mas não recursa diretórios ocultos,
adicione parênteses is_dir(...)?d(...):"..."para remover entradas ocultas da saída (+2)
substitua "#^\.#"por #^\.+$#para exibir / recursar entradas ocultas, mas pule entradas de ponto (+2)
- pode gerar erros quando os diretórios estão aninhados muito profundamente. Inserir
closedir($s);antes da final }para corrigir (+13)
- falhará se um diretório contiver uma entrada sem nome, preceda
false!==a condição while para corrigir (+8)
com glob, 182 bytes (provavelmente 163 no php futuro)
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)."
";}
- não exibe ou recursa arquivos / diretórios ocultos
2 apoia GLOB_MARK , acrescentará uma barra a todos os nomes de diretório, assim comols -F
- os
preg_replacecaracteres especiais escapes glob que
eu poderia ter abusado preg_quotepor isso (-19); mas isso falharia nos sistemas Windows, pois a barra invertida é o separador de diretórios lá.
- O php pode incluir em breve uma função glob_quote , que permitirá o mesmo golfe
preg_quotee o trabalho em todos os sistemas.
com iteradores, 183 bytes
(bem, não puramente iteradores: usei implícito SplFileInfo::__toString()no golfe $f->getBaseName()e $f->isDir()nas funções antigas do 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)?"/":"","
";}
- nenhuma barra final necessária
- exibe e recursa entradas ocultas (
ls -a)
- inserir
,4096ou ,FilesystemIterator::SKIP_DOTSantes ),1para pular entradas de ponto (+5) ( ls -A)
- flag
1significaRecursiveIteratorIterator::SELF_FIRST