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

7-1.ファイル・アーカイブ

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

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

コメント

タイトルとURLをコピーしました