こんにちは。きんくまです。
Terminal でディレクトリかファイルのみをlsで表示する方法について調べました。
ファイル数が多くなってくるとディレクトリだけみたいとかありますよね。
元記事はVIVEK GITEさんが書いた記事です。(今回からリスペクト!ということで、なるべく記事の著者名を載せるようにしようと思います。)
HowTo: Linux / UNIX List Just Directories Or Directory Names
ディレクトリのみ表示
詳細表示つき
ls -l | grep ^d
詳細表示なし
ls -F | grep /
ファイルのみ表示
詳細表示つき
ls -l | grep -v ^d
詳細表示なし
ls -F | grep -v /
コマンドの解説
これだけじゃなんなんで、コマンドの解説をします。
詳細表示について
-l オプションで詳細表示したものを、パイプ | を通して、そのうちdからはじまるもの(=ディレクトリ)を表示するということです。
ファイルを表示する場合はgrepのオプションに -v をつけることで、逆のものをあつめます。つまり、dからはじまらない(=ファイル)を表示します。
詳細表示なしについて
-F オプションで、ディレクトリの場合は名前の後ろに「/」をつけて表示します。これをパイプを通して、/がついているものだけgrepでひっぱるということです。
ファイルは-vオプションなので、詳細表示と同じです。
コマンド化する
ワンライナーとはいえ、コマンドとしては長いです。
なので、これに名前をつけてコマンド化してしまいましょう。
~/.bash_profileに下記のコードを付け加えて、Terminalを立ち上げ直します。
alias lf="ls -l | grep -v ^d" alias ldir="ls -l | grep ^d"
これで、lf コマンドでファイルのみ、 ldir コマンドでディレクトリのみを表示することができるようになります。
unixはこうやって、自分の好きなコマンドを作って、シェルに登録して便利にしていくんですね。
パイプはいくつもつなげられるみたいなんで、例えば今回作ったlfコマンドにさらにlessを足して、
lf | less
みたいなこともできるんですね。なんか面白い。