web-dev-qa-db-ja.com

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

Bashコマンドを使用してディレクトリ内のフォルダだけを一覧表示する方法はありますか? (lsコマンドはすべてのファイルとフォルダーをリストします)

52
SpiXel

あなたが使用することができます:

ls -d -- */

すべてのディレクトリは/で終わるので、これは現在のパスのディレクトリだけをリストします。 - dオプションを指定すると、ディレクトリ名のみが印刷され、その内容は印刷されません。

64
Gaff

Stephen Martinの返事は警告を出し、現在のフォルダもリストしたので、私は提案する

find . -mindepth 1 -maxdepth 1 -type d

(これはLinux上にあります。POSIXのmanページでfindの-maxdepthと-mindepthが見つかりませんでした)

28
daniel kullmann
find . -maxdepth 1 -type d

フォルダだけを一覧表示します。そしてTeddyが指摘したように、サブディレクトリに再登録するのを止めるには-maxdepthが必要です。

12
0x7c0

Danielの答えは正しいです。 これは便利な追加機能です。

隠しフォルダが表示されないようにするには(.gitなど)、これを試してください。

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

また、環境によっては、findの出力の先頭にある を恐ろしいドットスラッシュ に置き換えるには、次のようにします。

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

あなたは "ls"の出力を "解析することは想定されていない"と言っています。その理由は、出力は人間が読める形式のものであり、私が思い出してみると、解析が不必要に複雑になる可能性があるからです。

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

私はちょうど何かの理由でlsとfindがうまくいかなかった(スペースと大括弧のついたファイル名、あるいは見逃していた他の何か)、それから次の行に沿って何かをしました

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

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

echo */も機能しますが、長い1行では、名前にスペースが含まれているとさらに難しくなります。

0
user353322

また使用することができます:

du

または

git ls-tree -d -r --name-only @
0
Steven Penny

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

$ 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
sdaau