UNIXのディレクトリのみを一覧表示する


219

指定したパスのディレクトリのみを一覧表示したい(lsそのようなオプションがない)。また、これは1行のコマンドで実行できますか?


12
そこkeept多分一生懸命プログラミングに関係のない質問のUNIX / Linuxの基本タイプが優れている::未来のためのunix.stackexchange.com
echox

回答:


315

ls -d */現在のディレクトリ内のディレクトリを一覧表示するには、これを試してください


17
ねえ、それはかなり気の利いた、私はいつも私たちに慣れていましたls -al | grep '^d'-これははるかに簡潔です。
paxdiablo

43
なぜ* / ?? 説明してください!?
Chandeep

6
適切な説明はありませんが、*/スラッシュで終わるアイテムのみが強制的に表示されることは知っています。この場合、-Fオプションがls使用されていなくても、この場合はディレクトリになります。ディレクトリでls *php終わるすべてのファイルの動作と表示方法に似ていますphp
デビッド・ハンコック

3
@ user975234誰かが同様の質問をして、リンクの
user1766760

17
ちょうど同じecho */ことも行います
nos

95

これを試して:

find . -maxdepth 1 -type d

8
私には、これはそれが行われるべき方法であるように見えます。提案されたls解決策とfindは異なり、(制限を課す可能性のあるシェルのワイルドカード拡張に依存せずに)仕事を行う責任があります。また、はるかに簡潔です。
peterp 14

1
これの悪い点は、結果をループしようとしていて、結果に名前にスペースが含まれている場合は機能しないことです。
ubiquibacon 2014年

2
また、あなたはディレクトリ自体を含めるなかった場合:find * -maxdepth 0 -type d
James Ko

@ubiquibacon find-print0または-execオプションを使用します。

1
少なくとも私のMacでは、これは本当に遅いです。完全な再帰検索を行うに思わfind通常はありませんが、出力のみ深さ1でフォルダ
カラブライト

22

以下

find * -maxdepth 0 -type d

基本的に、「*」の展開、つまり現在のディレクトリ内のすべてのエントリを-type d条件でフィルタリングします。

利点は、出力はと同じですがls -1 *、ディレクトリとエントリのみがドットで始まっていないことです。


13

ls -d */または使用できますtree -d

別の解決策はグロビングですが、これは使用しているシェルと、ディレクトリのグロビングがサポートされているかどうかによって異なります。

たとえばZSH:

zsh # ls *(/)

3
どのフレーバーのUnixを入手できtreeますか?
Johnsyweb

たとえば、すべての主要なLinuxディストリビューション?申し訳ありませんが、質問はありませんか?
echox

1
私はDebianディストリビューションを使用しており、treeデフォルトではインストールされていません(リポジトリにはあります)。
Stephen Schrauger 2013年

1
treeコマンドがネイティブのUNIXコマンドではないと私が思うので、反対票を投じます(間違っている場合は訂正してください)。
Tiago Cardoso

10

それを行う方法はたくさんあるので、ここにもう一つあります:

tree -d -L 1 -i --noreport
  • -d:ディレクトリ
  • -L:ツリーの深さ(したがって、1、作業ディレクトリ)
  • -i:インデントなし、印刷名のみ
  • --noreport:ツリーリストの最後に情報を報告しません

スイッチについて説明していただきありがとうございます。スタックオーバーフローは答えに関するものです。人々があなたと同じように説明してくれたり、「ただ男のエントリを読んだりしよう!」<-それは答えではありません。
Fusion27 2014

2行目から開始するには(ドットのみで行をスキップ):tree -d -L 1 -i --noreport | tail -n +2
adius

これは、ソフトリンクされたディレクトリをリストし、それらをリンクとして公開する便利な方法でリストする、最高ランクのソリューションです。私はバリエーションを好む:tree -C -d -L 1 -i --noreport | tail -n+2
Amnon Harel

9
ls -l | grep '^d'

エイリアスを作成してプロファイルファイルに追加できます

alias ld="ls -l| grep '^d'"

1
このコマンドではリンクは表示されません。リンクはファイルまたはディレクトリにすることができます。例:lrwxrwxrwx 1 root root 21 avril 15 17:38 cron-> / lib / init / upstart-job。
c-toesca 2014

7
find . -maxdepth 1 -type d -name [^\.]\* | sed 's:^\./::'

☀見つける。-maxdepth 1 -type d -name [^ \。] * | sed 's:^ \ ./ ::' zsh:一致が見つかりません:[^。] *
Michael Cole

6

現在の作業ディレクトリ内のディレクトリを一覧表示するために ls -d */使用できます。そして、隠しディレクトリを一覧表示する必要がある場合は、このコマンドを使用します ls -d .*/


6

これを使用してディレクトリのリストを取得します

ls -d */ | sed -e "s/\///g"

ls -d <カスタムディレクトリパス> | sed -e "s / \ /// g"が機能していません。
Dhwanit

ありがとうございました!すべての権限のないディレクトリリストが欲しかったので、これでうまくいきました。:)
codingjeremy

5

find specifiedpath -type d

サブディレクトリで再帰したくない場合は、代わりにこれを行うことができます:

find specifiedpath -type d -mindepth 1 -maxdepth 1

「ドット」ディレクトリ(名前がで始まる.)もリストされることに注意してください。ただし、特別なディレクトリ.やはありません..。「ドット」ディレクトリが必要ない場合は、grepそれらを除外できます。

find specifiedpath -type d -mindepth 1 -maxdepth 1 | grep -v '^\.'


1
を取り除くために言及mindepthすることに賛成票を投じて.ください!😁
adius

5

答えはあなたのシェルに依存します

zsh例えば、次の操作を実行できます。

echo *(/)

そして、現在の作業ディレクトリ内のすべてのディレクトリが表示されます。

見る man zshexpn、をしてください。

別のアプローチはを使用することfind(1)です。

find . -maxdepth 1 -type d -print  

find(1)には多くの用途があるため、ぜひお勧めしman findます。


4

これを行うには、スイッチとtreeコマンドを使用しdます。

% tree -d tstdir
tstdir
|-- d1
|   `-- d11
|       `-- d111
`-- d2
    `-- d21
        `-- d211

6 directories

詳細についてはman tree、を参照してください。


私は反対票を投じず、同じ質問をしました。あなたの答えはechoxのだましだと思われます。おそらくそれが理由です。
Louis Waweru 2013年

1
@ルイ-彼の言及に気づかなかったことに感謝しtreeます。まあ、誰かの雷を盗むつもりはなかった。
slm 2013年

ツリーの視覚化のための賛成投票
Andrejs


@TiagoCardoso-鉱山はそれよりも2年前に登場します。
slm 2017

2

このディレクトリがある場合:

ls -l

lrwxrwxrwx  1 nagios nagios     11 août   2 18:46 conf_nagios -> /etc/icinga
-rw-------  1 nagios nagios 724930 août  15 21:00 dead.letter
-rw-r--r--  1 nagios nagios  12312 août  23 00:13 icinga.log
-rw-r--r--  1 nagios nagios   8323 août  23 00:12 icinga.log.gz
drwxr-xr-x  2 nagios nagios   4096 août  23 16:36 tmp

すべてのディレクトリを取得するには、-Lを使用してリンクを解決します。

ls -lL | grep '^d'

drwxr-xr-x 5 nagios nagios   4096 août  15 21:22 conf_nagios
drwxr-xr-x 2 nagios nagios   4096 août  23 16:41 tmp

-Lなし:

ls -l | grep '^d'

drwxr-xr-x 2 nagios nagios   4096 août  23 16:41 tmp

conf_nagiosディレクトリがありません。


2
### If you need full path of dir and list selective dir with "name" of dir(or dir_prefix*):
find $(pwd) -maxdepth 1 -type d -name "SL*"

1

これは私のために働いています:

`ls -F | grep /`

(しかし、echo */@ nosによって言及されているように切り替えています)


1

リンクされたディレクトリを表示する別のソリューションを次に示します。「通常の」ls -lの出力のサブセットであるため、これを少し好みます。

ls -1d */ | rev | cut -c2- | rev | xargs ls -ld --color=always

1

bashでは:

ls -d */

すべてのディレクトリを一覧表示します

ls -ld */

すべてのディレクトリを長い形式でリストします

ls -ld */ .*/

隠しディレクトリを含むすべてのディレクトリを長い形式でリストします。


私は最近zsh(MacOS Catalina)に切り替えて、それを発見しました:

ls -ld */ .*/

現在のディレクトリに隠しディレクトリが含まれていない場合は機能しなくなります。

zsh: no matches found: .*/

上記のエラーが出力されますが、ディレクトリの印刷も失敗します。

ls -ld *(/) .*(/)

同じように失敗します。

これまでのところ、私はこれを発見しました:

ls -ld */;ls -ld .*/

まともな回避策です。;コマンドの区切りです。ただし、非表示のディレクトリがない場合は、ディレクトリが一覧表示され、非表示のディレクトリがない場合でもエラーが出力されます。

foo
bar
zsh: no matches found: .*/

lsカレントディレクトリのリストの内容のためのシェルコマンドです
-l(1行に1つのアイテム+他のクールな情報の束)がロングフォードでは、リストにしたいことを指定するためのフラグであり
-d、再帰的ではない「ファイルとして」すべてのディレクトリを一覧表示するためのフラグであると
*/されます引数「スラッシュで終わるすべてのファイルをリストする」
*は、「すべて」の単純な正規表現コマンドなので*/、「「/」で終わるすべてをリストするようにシェルに要求しています」

詳細についてはman ls、を参照してください。


私はこれを置きました:

alias lad="ls -ld */;ls -ld .*/"

私の.zshrcで、それは正常に動作するようです。

注:私はそれも発見しました

ls -ld .*/ 2> /dev/null

端末にsterrを表示するため、機能しません。解決策が見つかった場合は、回答を更新します。


0

du -d1おそらく最短のオプションです。(入力を別のコマンドにパイプする必要がない限り。)


0

指定したパスのディレクトリのみを一覧表示するには、ls -l |と入力します。グレップ博士


ファイル名にが含まれている場合、これにはファイルが含まれる可能性があり、drw所有者が読み取りおよび書き込みができないディレクトリは除外されます。grep ^dうまく機能します。
Tom Zych

0

ディレクトリの長いリスト

  • ls -l | grep '^ d'
  • ls -l | grep "^ d"

ディレクトリリスト
- lsと-d * /


既存の回答を複製する正当な理由はありますか?
Maxim Sagaydachny
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.