私はディレクトリのサブディレクトリを見つけることができます
ls -d -- */
または
ls -l | grep "^d"
しかし、これらはどちらも間接的に見えるため、ディレクトリだけを見つける標準的な方法があると思います。これを行う正しい方法はありますか?そうでない場合、これらのいずれかがEdgeケースで望ましくない動作につながるのでしょうか? (シンボリックリンク、隠しディレクトリなど)
答えは、探しているものよりも、出力をどのように処理するかに依存します。ターミナルで視覚的に参照するためのリストを見たいだけの場合、最初の解決策は実際にはかなりいいです。出力を処理する場合は、別の方法の使用を検討する必要があります。
別のプログラムにフィードするリストを取得する最も堅牢な方法の1つは、find
を使用することです。
find -maxdepth 1 -type d
これがフィードに適している理由は、find
が-print0
を使用してnullで区切られたデータを出力したり、-exec
を使用して別のプログラムへの引数として文字列を適切にエスケープしたりできるためです。これがlsの出力を解析するよりも優れている理由については、GregのWikiの ParsingLS を参照してください。
参考までに-ZSH(BASHではない)では、次のこともできます:ls -d -- *(/)
; (/)
修飾子 は、ZSHにグロブディレクトリのみに指示します。
とはいえ、独自に提案したソリューション(ls -d -- */
)とそれほど違いはなく、標準とはかけ離れています。
ls
(おそらく他のフラグに基づいて異なる)の出力に関する限り:
% ls
dir0 dir1 dir2 file0 file1 file2
% ls -d -- */
dir0/ dir1/ dir2/
% ls -d -- *(/)
dir0 dir1 dir2