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


10

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

ls -d -- */

または

ls -l | grep "^d"

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

回答:


17

答えは、あなたが何をするつもりで、より依存してやる、あなたが探しているものに比べて出力。端末で視覚的に参照するためのリストを見たいだけの場合、最初の解決策は実際には非常に優れています。出力を処理する場合は、別の方法の使用を検討する必要があります。

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

find -maxdepth 1 -type d

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


4
find . -maxdepth 1 -type dこれをOS X Yosemiteで機能させるには、入力する必要がありました。
Sean Levin

1
サブディレクトリを一覧表示するには、のように-mindepthも指定する必要があります find . -maxdepth 1 -mindepth 1 -type d。それ以外の場合は、現在のディレクトリ.が含まれます。
tinlyx

5

参考までに-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

zshはアスタリスクをすべてのファイルとディレクトリに展開し、(/)フラグはその展開の一部を選択するため、ls *(/)も機能し、echo *(/)、またはよりzshlyの方法で-l *(/ )。最初の2つのバージョンはbashでも機能します。
トール

1
*(/)は、非表示ではないディレクトリに*/展開する一方で、非表示ではないディレクトリまたはディレクトリへのシンボリックリンク(または、少なくとも、それらがディレクトリであることがわかるパスへのシンボリックリンク)に展開することに注意してください。
ステファンChazelas
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.