PHP, 180 byte
- Argumen pertama: path harus memiliki garis miring (atau garis miring terbalik)
- argumen kedua: level default ke
NULL
dan akan ditafsirkan sebagai 0
oleh str_repeat
; akan memberikan peringatan jika tidak disediakan
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
";}
- menampilkan file dan direktori tersembunyi, tetapi tidak mengulang direktori tersembunyi
menambahkan tanda kurung di sekitar is_dir(...)?d(...):"..."
untuk menghapus entri tersembunyi dari output (+2)
ganti "#^\.#"
dengan #^\.+$#
untuk menampilkan / rekur entri tersembunyi tetapi lewati entri titik (+2)
- dapat melempar kesalahan saat direktori disarangkan terlalu dalam. Masukkan
closedir($s);
sebelum final }
untuk memperbaikinya (+13)
- akan gagal jika direktori berisi entri tanpa nama,
false!==
tergantung pada kondisi sementara untuk diperbaiki (+8)
dengan glob, 182 byte (mungkin 163 di php masa depan)
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)."
";}
- tidak menampilkan atau mengulang file / direktori tersembunyi
2
singkatan GLOB_MARK
, akan menambahkan garis miring ke semua nama direktori, seperti halnyals -F
- yang
preg_replace
lolos gumpal karakter khusus
saya bisa disalahgunakan preg_quote
untuk ini (-19); tapi itu akan gagal pada sistem Windows, karena backslash adalah pemisah direktori di sana.
- php dapat segera menyertakan fungsi glob_quote , yang akan memungkinkan bermain golf yang sama dengan
preg_quote
dan bekerja pada semua sistem.
dengan iterators, 183 byte
(well, bukan iterators murni: saya menggunakan implisit SplFileInfo::__toString()
untuk golf $f->getBaseName()
dan $f->isDir()
ke fungsi PHP 4 lama).
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)?"/":"","
";}
- tidak diperlukan garis miring garis miring
- menampilkan dan berulang entri tersembunyi (
ls -a
)
- masukkan
,4096
atau ,FilesystemIterator::SKIP_DOTS
sebelum ),1
untuk melewati entri titik (+5) ( ls -A
)
- bendera
1
adalah singkatanRecursiveIteratorIterator::SELF_FIRST