PHP, 180 octets
- premier argument: le chemin doit avoir une barre oblique de fin (ou barre oblique inverse)
- deuxième argument: le niveau par défaut est
NULL
et sera interprété comme 0
par str_repeat
; lancera un avertissement s'il n'est pas fourni
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
";}
- affiche les fichiers et répertoires cachés, mais ne recrée pas les répertoires masqués,
ajoute des parenthèses is_dir(...)?d(...):"..."
pour supprimer les entrées masquées de la sortie (+2)
remplace "#^\.#"
par #^\.+$#
pour afficher / recrée les entrées masquées mais ignore les entrées pointées (+2)
- peut générer des erreurs lorsque les répertoires sont imbriqués trop profondément. Insérer
closedir($s);
avant la finale }
à corriger (+13)
- échouera si un répertoire contient une entrée sans nom, ajoutez
false!==
la condition while à corriger (+8)
avec glob, 182 octets (probablement 163 dans le futur 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)."
";}
- n'affiche pas ou n'invente pas les fichiers / répertoires cachés
2
signifie GLOB_MARK
, ajoutera une barre oblique à tous les noms de répertoire, commels -F
- les
preg_replace
caractères spéciaux glob évadés que
j'aurais pu abuser preg_quote
pour cela (-19); mais cela échouerait sur les systèmes Windows, car la barre oblique inverse est le séparateur de répertoires.
- php pourrait bientôt inclure une fonction glob_quote , qui permettra le même golf
preg_quote
et fonctionner sur tous les systèmes.
avec des itérateurs, 183 octets
(enfin, pas purement des itérateurs: j'ai utilisé implicitement SplFileInfo::__toString()
le golf $f->getBaseName()
et $f->isDir()
les anciennes fonctions 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)?"/":"","
";}
- aucune barre oblique de fin requise
- affiche et récursive les entrées cachées (
ls -a
)
- insérer
,4096
ou ,FilesystemIterator::SKIP_DOTS
avant ),1
pour ignorer les entrées de points (+5) ( ls -A
)
- drapeau
1
signifieRecursiveIteratorIterator::SELF_FIRST