PHP, 180 bytes
- primer argumento: la ruta debe tener una barra inclinada final (o barra diagonal inversa)
- segundo argumento: el nivel predeterminado es
NULL
y será interpretado como 0
por str_repeat
; lanzará una advertencia si no se proporciona
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
";}
- muestra archivos y directorios ocultos, pero no repite directorios ocultos,
agregue paréntesis is_dir(...)?d(...):"..."
para eliminar las entradas ocultas de la salida (+2)
reemplace "#^\.#"
con #^\.+$#
para mostrar / repetir entradas ocultas pero omita las entradas de puntos (+2)
- puede arrojar errores cuando los directorios están anidados demasiado profundo. Insertar
closedir($s);
antes de la final }
para arreglar (+13)
- fallará si un directorio contiene una entrada sin nombre, anteponiendo
false!==
la condición while para arreglar (+8)
con glob, 182 bytes (probablemente 163 en 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)."
";}
- no muestra ni repite archivos / directorios ocultos
2
significa GLOB_MARK
, agregará una barra diagonal a todos los nombres de directorio, al igual quels -F
- los
preg_replace
caracteres especiales de escape se
podrían haber abusado preg_quote
de esto (-19); pero eso fallaría en los sistemas Windows, ya que la barra diagonal inversa es el separador de directorio allí.
- php pronto puede incluir una función glob_quote , que permitirá el mismo golf
preg_quote
y funcionará en todos los sistemas.
con iteradores, 183 bytes
(bueno, no solo iteradores: solía estar implícito SplFileInfo::__toString()
en el golf $f->getBaseName()
y $f->isDir()
en las antiguas funciones de 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)?"/":"","
";}
- no se requiere barra inclinada
- muestra y recurre entradas ocultas (
ls -a
)
- inserte
,4096
o ,FilesystemIterator::SKIP_DOTS
antes ),1
para omitir entradas de puntos (+5) ( ls -A
)
- bandera
1
significaRecursiveIteratorIterator::SELF_FIRST