大規模なプロジェクトのソースツリーをはじめ、個人PCの作業ディレクトリまで、最初は綺麗に分類/整理をしておこうと思っていても、気がつけばファイルとディレクトリがごちゃまぜになってしまいがち…
ちょっとした整理をしたいときに、ディレクトリだけ何があるのか把握したいときなどにちょっと迷ったので。
サンプル構成
$ ls -lF
total 0
drwxr-xr-x 11 ks staff 374 6 7 14:24 1/
-rw-r--r-- 1 ks staff 0 6 7 14:22 2
-rw-r--r-- 1 ks staff 0 6 7 14:22 3
drwxr-xr-x 11 ks staff 374 6 7 14:24 4/
-rw-r--r-- 1 ks staff 0 6 7 14:22 5
drwxr-xr-x 11 ks staff 374 6 7 14:24 6/
-rw-r--r-- 1 ks staff 0 6 7 14:22 7
drwxr-xr-x 11 ks staff 374 6 7 14:24 8/
drwxr-xr-x 2 ks staff 68 6 7 14:22 9/
こんな感じのディレクトリ構成を前提に。
lsで表示してからgrepで抽出
まずは単純に、ls -l
の結果をgrep
でフィルタする方法
lsからgrep
$ls -l | grep '^d'
drwxr-xr-x 11 ks staff 374 6 7 14:24 1
drwxr-xr-x 11 ks staff 374 6 7 14:24 4
drwxr-xr-x 11 ks staff 374 6 7 14:24 6
drwxr-xr-x 11 ks staff 374 6 7 14:24 8
drwxr-xr-x 2 ks staff 68 6 7 14:22 9
思考の流れ的にも綺麗でシンプルだと思うのですが、何となく先頭dの"文字"で引っかけるのが、余り論理的じゃ無い気がする。
なので、もう少し上手い方法が無いか考えてみます。
findで検索してからls
先にfind
でディレクトリを検索してからls -l
してみます
findからls
$ find . -type d -depth 1 | xargs ls -ld
drwxr-xr-x 11 ks staff 374 6 7 14:24 ./1
drwxr-xr-x 11 ks staff 374 6 7 14:24 ./4
drwxr-xr-x 11 ks staff 374 6 7 14:24 ./6
drwxr-xr-x 11 ks staff 374 6 7 14:24 ./8
drwxr-xr-x 2 ks staff 68 6 7 14:22 ./9
得られる結果はほぼほぼ同じですが、"./"が付くのが気に入らない…。
findからbasenameしてls
$ find $(pwd) -type d -depth 1 | xargs basename | xargs ls -ld
drwxr-xr-x 11 ks staff 374 6 7 14:24 1
drwxr-xr-x 11 ks staff 374 6 7 14:24 4
drwxr-xr-x 11 ks staff 374 6 7 14:24 6
drwxr-xr-x 11 ks staff 374 6 7 14:24 8
drwxr-xr-x 2 ks staff 68 6 7 14:22 9
先ほどの"lsで表示してからgrepで抽出"と同様の出力が得られました。
と、自己満足できたところで…
実際に使うのは"lsで表示してからgrepで抽出"なのだろうなぁ(^_^;)