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