ディレクトリのみが表示される「ls」コマンドのオプションはありますか?


74

時々、ファイルではなくディレクトリのみをチェックする必要があります。コマンドlsにはオプションがありますか?または、それを行うためのユーティリティはありますか?

編集:私はMac OS Xを使用している、と私はディレクトリを持っているにもかかわらず私にls -d与えます.


4
誰かがls -d与える.理由と、*/それを機能させるために最後に追加する必要がある理由を説明できますか?
cwd

3
@cwdファイルを指定しない場合、lsデフォルトはになり.ます。そして-d、ディレクトリの内容を印刷せず、ディレクトリ自体を印刷することを意味します。
ミケル

1
@cwdを使用するls -p/、ディレクトリ名の後に表示されます。だから、*/ディレクトリ名と照合されるだけのパターンである/コンボ。
ピット

〜/ .bash_aliasesファイルに@Steven_Dの回答を実装する関数を作成しました:gist.github.com/rjurney/998f4951a57bfa5daeb9a6c18f6f4827
rjurney

回答:


84

私はすでに選択された答えがあることを知っていますが、あなたはちょうどで要求された動作を得ることができますls

ls -ld -- */

(「-」はパラメーターの終わりを示し、ハイフンで始まるフォルダー名が追加のコマンドオプションとして解釈されるのを防ぎます。)

これにより、実行中の現在の作業ディレクトリ内のすべての非表示でない(シェルのグロブを設定しない限り)ディレクトリがリストされます(ディレクトリへのシンボリックリンクも含まれていることに注意してください)。他のフォルダのすべてのサブディレクトリを取得するには、次を試してください:

ls -ld /path/to/directory/*/

-lはオプションです。


5
いいね ディレクトリには暗黙/の終わりがあるとは考えていませんでしたが、今では答えがわかりました。結局のところ、タブ補完は常にそれを追加します。
gvkv

-d for dir, -l for long format。の目的は--何ですか?
ディネシュクマール

1
これは短く見え、ほとんどの場合に機能しますが、ディレクトリのシンボリックリンクではなく、真のディレクトリが必要な場合は、このアプローチを使用したくないかもしれません。そのfind場合、実際には良い選択です。
バイオサイバーマン

1
findディレクトリの数が引数の最大長を超える場合にも利点があります。
スティーブンD

後ろ向きに作業して、拡張子が付いているものはすべて無視できることに気付きましたls -alhF --ignore=*.*。すなわち、これは「隠された」フォルダを処理する方法をよくわからない.myHiddenFolder
Timmah

14

いいえ、しかし簡単なfindコマンドでそれができます:

find . -type d -depth 1

または grep

ls -F | grep /

その後、必要に応じていずれかをエイリアスできます。


6
Ubuntu 14.04ではそうでした-maxdepth 1。またfind:私は順序反転したかったfind . -maxdepth 1 -type d
ブラッドCupit

そのls -F | grep /ソリューションは驚くほどうまくいきます!FreeBSDマシンで作業できるのはこれだけだと思われます。Fishを使用すると、何か*/が機能しない可能性がありますか?
cjm

私はFishで働いたことがないので、それについてはわかりませんが、-Fオプションは驚異的に機能します。
gvkv

7

ディレクトリユーティリティの概要を取得するツリーユーティリティが好きです。MacPortsと私が試したすべてのLinuxディストリビューションで利用可能です。

tree -d -L 2

これにより、すべてのディレクトリが2レベルの深さで表示されます。


6

また、隠しディレクトリを表示する必要があったため、上記の提案を自分のニーズに合わせて変更しました

ls -d -- */ .*/

(シェルに応じて、.およびを含めることもできます..


2

zsh(MacOSの上でデフォルトで見られるように、それも可能に使用される/bin/shが)、あなたは自分のタイプに基づいてファイルを選択するためにグロブ修飾子を使用したいです:

  • 隠されていないディレクトリをリストします。

    ls -d -- *(/)
    
  • すべてのディレクトリをリストします。

    ls -d -- *(D/)
    

    .そして..いつもあなたがそれらをしたい場合は、個別にそれらを追加、除外されています)

  • また、ディレクトリへのシンボリックリンクを含めます:

    ls -d -- *(D-/)
    

    -シンボリックリンクの解決後にさらに修飾子が適用されるようにします)。


-1

lsにはMac OS Xのバグがあると思います。回避策はgrepを使用することです... ls -l / | grep "^d"


1
grep "^d"ハックを使用するのは私だけではないことを知ってうれしいです
マイケル・ムロゼク

6
私の知る限り、彼が説明する動作はバグではなく、GNU lsを使用している場合も同じです。-dオプションは、内容ではなくディレクトリのリストを表示します。これは便利です理由を参照するには、違いを参照してくださいls -l /homels -dl /home
スティーブン・D

カラットはシェルにとって特別なものではありません。あなただけを使用することができますls -l / | grep ^d。あなたがいる場合しているあなたは、パラメータの拡張を必要としないので、引用符を使用しようと、それらを作る単一引用符。 ls -l / | grep '^d'。はい、私は退屈です。しかし、本当に、これをしてください。:)
ワイルドカード

-1
$ ls -p | grep /

-pフラグが作るls、そのファイルがディレクトリである場合、各ファイル名の後にスラッシュ( `/ ')を追加します。


-2

最も簡単な方法は、次のコマンドを入力することです。これは、ほとんどのUNIXおよびLinuxプラットフォームとバージョンで機能します。-F必要に応じてスキップできますが、ディレクトリ名の末尾に/を追加するのは引数です。-Cそれらのすべての現在のディレクトリにある-引数がディレクトリ名のみをキャプチャします。現在のパスのディレクトリとサブディレクトリのみを表示する場合は、-R引数(ls -CFR)を追加するだけです。

# ls -CF
/dir1  /dir2  /dir3  /beaches  /Work  /Other 

1
ls私が知っているすべての実装およびPOSIX仕様ではls、非ディレクトリファイルをスキップするのではなく-Cに出力することです。あなたの例では/、ファイル名の前にが印刷されますが、これはls実装では行われません。を使用すると-F/ディレクトリファイルのファイル名に追加されます。
ステファンシャゼラス

この答えを見たとき、私は「これは本当ですか?」と思いました。
G-Man

-3
ls -G

これにより、ディレクトリが青で表示されます


1
このコマンドを使用すると、ディレクトリのみが表示されますか?
-don_crissti
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.