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
";}
- छिपी हुई फ़ाइलों और निर्देशिकाओं को प्रदर्शित करता है, लेकिन छिपी हुई निर्देशिकाओं की पुनरावृत्ति नहीं करता है, आउटपुट (+2) से छिपी हुई प्रविष्टियों को हटाने के
लिए कोष्ठक जोड़ते हैं, is_dir(...)?d(...):"..."
छिपी हुई प्रविष्टियों को प्रदर्शित करने / पुन: दर्ज करने के लिए
प्रतिस्थापित "#^\.#"
करते #^\.+$#
हैं, लेकिन डॉट प्रविष्टियों (+2) को छोड़ देते हैं
- जब निर्देशिकाएँ बहुत गहरी हों, तो त्रुटियां फेंक सकते हैं। तय करने
closedir($s);
से पहले डालें }
(+13)
- यदि कोई निर्देशिका बिना नाम वाली प्रविष्टि में विफल रहती है, तो
false!==
ठीक करने के लिए शर्त पर प्रीपेन्ड करें (+8)
ग्लोब के साथ, 182 बाइट्स (शायद भविष्य के php में 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)."
";}
- छिपी हुई फ़ाइलों / निर्देशिकाओं को प्रदर्शित या पुनर्जीवित नहीं करता है
2
के लिए खड़ा है GLOB_MARK
, सभी निर्देशिका नामों के लिए एक स्लैश जोड़ देगा, जैसा कि करता हैls -F
- इस
preg_replace
विशेष ग्लोब के लिए
मैं preg_quote
(-19) के साथ दुर्व्यवहार कर सकता था ; लेकिन यह विंडोज सिस्टम पर विफल होगा, क्योंकि बैकस्लैश वहां निर्देशिका विभाजक है।
- php में जल्द ही एक फंक्शन glob_quote शामिल हो सकता है , जो समान गोल्फिंग की अनुमति देगा और सभी प्रणालियों पर काम करेगा।
preg_quote
iterators के साथ, 183 बाइट्स
(अच्छी तरह से, नहीं विशुद्ध रूप से Iterators: मैं अंतर्निहित इस्तेमाल किया 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