bashでlsを使ってディレクトリだけをリストアップする検証

カレントパス内のディレクトリを一覧表示するコマンドです。ls -d */`

パターン */ は具体的に何をするのでしょうか。

また、上記のコマンド(例:ls -d /home/alice/Documents)で絶対パスを与えると、そのパス内のディレクトリのみをリストアップすることができますが、これはどのようにして行うのでしょうか?

ソリューション

/は、カレントディレクトリ内のすべてのサブディレクトリにマッチするパターンです(は、すべてのファイルと*サブディレクトリにマッチしますが、/はディレクトリに限定します)。同様に,/home/alice/Documents以下のすべてのサブディレクトリをリストアップするには,ls -d /home/alice/Documents/*/` とします。

解説 (11)

4つの方法があり、それぞれ出力形式が異なります。

1.
echo を使う

例: echo */, echo */*/

以下はその結果です。

cs/ draft/ files/ hacks/ masters/ static/  
cs/code/ files/images/ static/images/ static/stylesheets/  

2.ls` のみを使用する場合

例) ls -d */
これがまさに私が得たものです。

cs/     files/      masters/  
draft/  hacks/      static/  

または、リストとして(詳細情報付き): ls -dl */

3.lsgrep` の使用

例: ls -l | grep "^d" 以下のような結果になりました。

drwxr-xr-x  24 h  staff     816 Jun  8 10:55 cs  
drwxr-xr-x   6 h  staff     204 Jun  8 10:55 draft  
drwxr-xr-x   9 h  staff     306 Jun  8 10:55 files  
drwxr-xr-x   2 h  staff      68 Jun  9 13:19 hacks  
drwxr-xr-x   6 h  staff     204 Jun  8 10:55 masters  
drwxr-xr-x   4 h  staff     136 Jun  8 10:55 static  

4.Bashスクリプト(ファイル名にスペースが含まれる場合は推奨しません

例: for i in $(ls -d */); do echo ${i%%/}; done
以下は、私が得た結果です。

cs  
draft  
files  
hacks  
masters  
static

末尾に「/」をつけたい場合は、次のようになります。for i in $(ls -d */); do echo ${i}; done となります。

cs/  
draft/  
files/  
hacks/  
masters/  
static/
解説 (14)

使っています。

ls -d */ | cut -f1 -d'/'

これは、末尾にスラッシュのない単一のカラムを作成するもので、スクリプトに便利です。

私の2セントです。

解説 (5)