PHP, 180 bayt
- ilk argüman: yolun sonunda eğik çizgi (veya ters eğik çizgi) olması gerekir
- ikinci argüman: seviye varsayılan olarak
NULL
şu şekilde olur ve 0
tarafından yorumlanır str_repeat
; belirtilmezse bir uyarı gönderir
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
";}
- görüntüler dosyaları ve dizinleri gizli ama -recurse gizli dizinleri gelmez
parantez içine eklemek is_dir(...)?d(...):"..."
çıkışı (2) gizli girdileri kaldırmak için
değiştirin "#^\.#"
ile#^\.+$#
(+2) / ekrana gizli girdileri recurse ama girdileri nokta atlamak
- dizinler çok derin yuvalanmışsa hata atabilir. Finalden
closedir($s);
önce ekle}
Düzeltmek (+13)
- bir dizin adsız bir girdi içeriyorsa başarısız olur,
false!==
düzeltmek için while koşulunun başına (+8)
glob ile, 182 bayt (muhtemelen php gelecekteki 163)
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)."
";}
- gizli dosyaları / dizinleri görüntülemez veya geri almaz
2
anlamına gelir GLOB_MARK
, tüm dizin adlarına eğik çizgi eklerls -F
preg_replace
kaçar özel karakterler topak
ı istismar olabilirdipreg_quote
(-19) bunun için; ancak ters eğik çizgi orada dizin ayırıcı olduğundan Windows sistemlerinde başarısız olur.
- php olabilir yakında bir işlev içerir glob_quote aynı şekilde golf sağlayacak,
preg_quote
tüm sistemlerde ve iş.
yineleyicilerle, 183 bayt
(sadece yineleyiciler değil: SplFileInfo::__toString()
golf $f->getBaseName()
ve $f->isDir()
eski PHP 4 işlevlerini örtük olarak kullandım .)
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)?"/":"","
";}
- sondaki eğik çizgi gerekmez
- gizli girişleri görüntüler ve tekrarlar (
ls -a
)
- insert
,4096
veya ,FilesystemIterator::SKIP_DOTS
öncesinde ),1
((+5) girişlerini nokta atlamak için ls -A
)
- bayrak
1
duruyorRecursiveIteratorIterator::SELF_FIRST