bashコマンドを使用してフォルダーを一覧表示する方法は?


52

bashコマンドを使用してディレクトリ内のフォルダのみをリストする方法はありますか?(lsコマンドはすべてのファイルとフォルダーをリストするため)

回答:


66

次を使用できます。

ls -d -- */

すべてのディレクトリはで終わるため/、現在のパスにあるディレクトリのみがリストされます。-dディレクトリ名のみが印刷されているオプション保証しません、その内容。


2
ls-* /以下の内容ですべてのディレクトリをリストします
-Vins

1
8088 @の違いは何であるls -d -- */とはls -d */
ルイ14年

5
@Louis --は、ファイルの名前が-llsの場合に長いリスト形式のオプションとして解釈されないように、オプションの終わりを示すために通常使用されます。
クリスティアンシウピトゥ14

28

スティーブン・マーティンの応答は警告を発し、現在のフォルダーもリストしましたので、お勧めします

find . -mindepth 1 -maxdepth 1 -type d

(これはLinux上にあり、POSIXのmanページでfindの-maxdepthと-mindepthを見つけることができませんでした)


1
私が知っている古い質問。私も最初にこのタスクを見つけるために回るでしょうが、隠されたディレクトリも見つけるので、ls -d -- */オプションが好きfindです。これは時々役に立つかもしれませんが、時にはトラブルを引き起こすこともあります。このコメントが他の人の役に立つことを願っています。+1
マッチ

12
find . -maxdepth 1 -type d

フォルダーのみをリストします。Teddyが指摘したように、サブディレクトリへの再圧縮を停止するには-maxdepthが必要です。


5
あなたもおそらく欲しい-maxdepth 1
テディ

6

ダニエルの答えは正しいです。ただし、いくつかの便利な追加機能があります。

隠しフォルダー(など.git)をリストしないようにするには、これを試してください:

find . -mindepth 1 -maxdepth 1 -type d  \( ! -iname ".*" \)

また、一部の環境で出力の先頭にある恐ろしいドットスラッシュを置き換えるにfind、これを使用します。

find . -mindepth 1 -maxdepth 1 -type d  \( ! -iname ".*" \) | sed 's|^\./||g'

1

あなたはlsの出力を「想定されていない」解析する、またはそう言われています。背後にある理由は、出力は人間が読めるように意図されており、思い出すと、解析が不必要に複雑になる可能性があるためです。

lsやfindが必要ない場合は、 "[-d]"で "*"をフィルタリングしてみてください。

私はそれをやった、何らかの理由でlsとfindが機能していなかった(スペースとブラケットのあるファイル名、または私が見落としていた他の何か)、その後、私は

for f in * ; do [ -d "$f" ] && echo $f is indeed a folder ; done

0

globパターンの選択に関して、ここで私を混乱させたものを強調するために。あなたはこれを持っていると言います:

$ cd /tmp
$ mkdir testglob
$ for ix in {00,01,02,03} ; do mkdir testglob/mydir_${ix} ; done
$ for ix in {00,01,02,03} ; do touch testglob/myfile_${ix} ; done
$ for ix in {00,01,02,03} ; do touch testglob/mydir_${ix}.txt ; done
$ for ix in {00,01,02,03} ; do mkdir testglob/otherdir_${ix} ; done
$ tree testglob/
testglob/
├── mydir_00
├── mydir_00.txt
├── mydir_01
├── mydir_01.txt
├── mydir_02
├── mydir_02.txt
├── mydir_03
├── mydir_03.txt
├── myfile_00
├── myfile_01
├── myfile_02
├── myfile_03
├── otherdir_00
├── otherdir_01
├── otherdir_02
└── otherdir_03

8 directories, 8 files

したがって、ここではmydir*ディレクトリのみを選択するとします。終了スラッシュを省略すると、ls -dファイルもリストされることに注意してください。

$ ls -d testglob/mydir*   # also `ls -d -- testglob/mydir*`
testglob/mydir_00      testglob/mydir_01      testglob/mydir_02      testglob/mydir_03
testglob/mydir_00.txt  testglob/mydir_01.txt  testglob/mydir_02.txt  testglob/mydir_03.txt

...ただし、終了スラッシュを使用すると、ディレクトリのみがリストされます。

$ ls -d testglob/mydir*/   # also `ls -d -- testglob/mydir*/`
testglob/mydir_00/  testglob/mydir_01/  testglob/mydir_02/  testglob/mydir_03/

0

printf "%s\n" */ $ PWD内のすべてのディレクトリをリストします。

echo */ も機能しますが、長い1行では、名前にスペースが含まれる場合はより困難になります。


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