PHP, 180 ไบต์
- อาร์กิวเมนต์แรก: เส้นทางต้องมีเครื่องหมายสแลช (หรือเครื่องหมายแบ็กสแลช)
- อาร์กิวเมนต์ที่สอง: ระดับเริ่มต้นที่
NULL
และจะถูกตีความว่าเป็น0
โดยstr_repeat
; จะส่งคำเตือนหากไม่ได้ระบุไว้
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
";}
- แสดงไฟล์และไดเรกทอรีที่ซ่อนอยู่ แต่ไม่เรียกคืนไดเรกทอรีที่ซ่อนอยู่
เพิ่มวงเล็บไปรอบ ๆis_dir(...)?d(...):"..."
เพื่อลบรายการที่ซ่อนอยู่จากเอาท์พุท (+2)
แทนที่"#^\.#"
ด้วย#^\.+$#
เพื่อแสดง / เรียกคืนรายการที่ซ่อนอยู่ แต่ข้ามรายการ dot (+2)
- อาจทำให้เกิดข้อผิดพลาดเมื่อไดเรกทอรีซ้อนกันลึกเกินไป แทรก
closedir($s);
ก่อนที่}
จะแก้ไขขั้นสุดท้าย(+13)
- จะล้มเหลวหากไดเรกทอรีมีรายการที่ไม่มีชื่อให้ผนวก
false!==
กับเงื่อนไข while เพื่อแก้ไข (+8)
กับ glob, 182 ไบต์ (อาจเป็น 163 ใน 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)."
";}
- ไม่แสดงหรือเรียกคืนไฟล์ / ไดเรกทอรีที่ซ่อนอยู่
2
ย่อมาจากGLOB_MARK
จะผนวกเครื่องหมายทับเพื่อชื่อไดเรกทอรีทั้งหมดเช่นเดียวกับls -F
preg_replace
หนี glob อักขระพิเศษ
ฉันจะได้ทำร้ายpreg_quote
สำหรับเรื่องนี้ (-19); แต่นั่นจะล้มเหลวในระบบ Windows เนื่องจากแบ็กสแลชเป็นตัวคั่นไดเรกทอรีที่นั่น
- php เร็ว ๆ นี้อาจรวมถึงฟังก์ชั่นglob_quoteซึ่งจะช่วยให้การเล่นกอล์ฟเดียวกับ
preg_quote
และทำงานได้กับทุกระบบ
ด้วยตัววนซ้ำ, 183 ไบต์
(ดี, ไม่ใช่ตัววนซ้ำอย่างหมดจด: ฉันใช้SplFileInfo::__toString()
การเล่นกอล์ฟ$f->getBaseName()
และ$f->isDir()
ฟังก์ชั่น 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)?"/":"","
";}
- ไม่ต้องต่อท้ายสแลช
- แสดงและเรียกซ้ำรายการที่ซ่อนอยู่ (
ls -a
)
- แทรก
,4096
หรือ,FilesystemIterator::SKIP_DOTS
ก่อนที่),1
จะข้ามรายการจุด (+5) ( ls -A
)
- ธง
1
ย่อมาจากRecursiveIteratorIterator::SELF_FIRST