web-dev-qa-db-ja.com

現在のディレクトリのサブディレクトリを一覧表示する正しい方法はありますか?

私はディレクトリのサブディレクトリを見つけることができます

ls -d -- */

または

ls -l | grep "^d"

しかし、これらはどちらも間接的に見えるため、ディレクトリだけを見つける標準的な方法があると思います。これを行う正しい方法はありますか?そうでない場合、これらのいずれかがEdgeケースで望ましくない動作につながるのでしょうか? (シンボリックリンク、隠しディレクトリなど)

10
Eric Wilson

答えは、探しているものよりも、出力をどのように処理するかに依存します。ターミナルで視覚的に参照するためのリストを見たいだけの場合、最初の解決策は実際にはかなりいいです。出力を処理する場合は、別の方法の使用を検討する必要があります。

別のプログラムにフィードするリストを取得する最も堅牢な方法の1つは、findを使用することです。

find -maxdepth 1 -type d

これがフィードに適している理由は、find-print0を使用してnullで区切られたデータを出力したり、-execを使用して別のプログラムへの引数として文字列を適切にエスケープしたりできるためです。これがlsの出力を解析するよりも優れている理由については、GregのWikiの ParsingLS を参照してください。

17
Caleb

参考までに-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
5
Curtis F.