PHP, 180 bytes
- primeiro argumento: o caminho deve ter uma barra final (ou barra invertida)
- segundo argumento: o nível padrão é
NULL
e será interpretado como 0
por 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_replace
caracteres especiais escapes glob que
eu poderia ter abusado preg_quote
por 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_quote
e 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
,4096
ou ,FilesystemIterator::SKIP_DOTS
antes ),1
para pular entradas de ponto (+5) ( ls -A
)
- flag
1
significaRecursiveIteratorIterator::SELF_FIRST