PHP、180バイト
- 最初の引数:パスには末尾にスラッシュ(またはバックスラッシュ)が必要です
- 2番目の引数:レベルのデフォルトはで
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)
置換"#^\.#"し#^\.+$#て隠しエントリを表示/再帰しますが、ドットエントリをスキップします(+2)
- ディレクトリのネストが深すぎると、エラーがスローされる場合があります。修正する
closedir($s);ファイナルの前に挿入}(+13)
- ディレクトリに名前のないエントリが含まれている場合は失敗
false!==し、修正するためにwhile条件の前に追加します(+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エスケープグロブ特殊文字(-19)。しかし、円記号はそこにあるディレクトリー区切り文字なので、Windowsシステムでは失敗します。
preg_quote
- 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