LS-Dでぶっとぶ(lsコマンドでディレクトリのみ表示)

lucy
リュックベッソン監督。『LUCY』(2014)。
どうしようもなくお馬鹿で可哀想な子ルーシーは、ある時マフィアに薬物密輸のためのコンテナにされてしまいます。可哀想な子はとことん可哀想です。そんなルーシーでしたが、体内に新種の薬物が廻りきってしまってから、彼女の脳は半端なく活性化、ゆるんだお馬鹿な表情から一転し、キリっとした顔のデキる女に変身します。計算早くなるわ、語学堪能になるわ。頭が良くなりたい私としては、とても欲しい薬です。どこで買えるのでしょうか。さらにルーシーは、薬物投入によりとんでもない覚醒を遂げます。そこまでの能力は要らないないなぁ、と、やや引き気味に鑑賞しつつ、でもやっぱり、こんな薬があったら、いろんなことが上手くなって人生楽しくなるのではっ!? と思うのでした。

lsコマンドには、数多くのオプションがあります。よく使うのは、オプションなしと、-lですね。

~$ ls
dir1  dir2  dir3  file1  file2  file3  file4  file5
~$ ls -l
合計 12
drwxr-xr-x 3 takk takk 4096  5月 24 20:21 dir1
drwxr-xr-x 3 takk takk 4096  5月 24 20:21 dir2
drwxr-xr-x 3 takk takk 4096  5月 24 20:22 dir3
-rw-r--r-- 1 takk takk    0  5月 24 20:22 file1
-rw-r--r-- 1 takk takk    0  5月 24 20:22 file2
-rw-r--r-- 1 takk takk    0  5月 24 20:22 file3
-rw-r--r-- 1 takk takk    0  5月 24 20:22 file4
-rw-r--r-- 1 takk takk    0  5月 24 20:22 file5
~$ 

オプションなしlsの使い方としては、ディレクトリ内容の確認のために無意識に打ち込んだり、lsの結果をパイプにかけたり、とかでしょうか。
例 ls | wc -l

lsではファイルもディレクトリも一緒くたに扱われるので、たまにディレクトリのみの一覧がほしくなる時があります。そんな時には、-dオプションがあります。
manマニュアルのls(-dオプション)の説明文には、

-d, --directory
ディレクトリ自身を一覧に表示する。  ディレクトリの内容は表示しない

と、あります。ただしそのまま使うと、

~$ ls -d
.
~$ 

なんだこれは、という結果になります。

lsによるディレクトリ一覧表示の前に、findやtreeでも一覧が取得できますので、おさらいしておきます。まずはfindの場合。

~$ find -maxdepth 1 -type d ! -name '.*'
./dir3
./dir2
./dir1
~$ 

なんとも長いコマンドラインです。
-maxdepth 1を指定することで、サブディレクトリを表示しないようにしています。
-type dはディレクリを指定しており、
-nameで指定しているのは、隠しディレクトリ(.ドットから始まるディレクトリ)で、!をつけることで、隠しディレクトリを表示しないようにしています。

次は、treeコマンドでディレクトリ一覧を取得してみます。

~$ tree -idL 1
.
dir1
dir2
dir3

3 directories
~$ 

findよりは短くて済むものの、余計な表示が出てしまいます。headで削除しても、

~$ tree -idL 1 | head -n -2
.
dir1
dir2
dir3
~$ 

まだ.ドットが残ってしまい。これぐらいなら手で消そう、なんて気になってしまいます。

ではlsでディレクトリ一覧は、どのように取得すれば良いでしょうか。

~$ ls -d */
dir1/  dir2/  dir3/
~$ 

さすがはls。すっきりしていますね。
この最後の/スラッシュが肝心要です。スラッシュがないとこうなります。

~$ ls -d *
dir1  dir2  dir3  file1  file2  file3  file4  file5
~$ 

ディレクトリ名の末尾に/がついてしまうのが気になるときは、trで削除しておきましょう。

~$ ls -d */ | tr -d /
dir1
dir2
dir3
~$ 

拙記事を書きながら、毎日コマンドラインのことばかり、よく思いつくもんだなあと我ながら関心します。
頭の良くなる薬に頼らずとも、好きこそ物の上手なれ。

Leave a Reply

Your email address will not be published. Required fields are marked *

CAPTCHA