gitの管理下にあるファイル一覧はgit ls-files
で取れますが、ディレクトリ一覧を取るコマンドやオプションが見当たらなかったため、無理やり取得する方法を考えてみました。
pecoでgitの管理下にあるディレクトリから絞り込めたら便利かなーと思ったのがきっかけです。
やり方
$ git ls-files | sed -e '/^[^\/]*$/d' -e 's/\/[^\/]*$//g' | sort | uniq
sed
では、ファイルパスが
- カレントディレクトリ直下のファイルだったら、その行を削除(
'/^[^\/]*$/d'
) - サブディレクトリ以下のファイルだったら、そのサブディレクトリのファイルパスに書き換え(
's/\/[^\/]*$//g'
)
を行っています。
最後にソートして重複消してって感じです。
最初はdirname
コマンドに渡してやってたんですが、毎回プロセスが生成されるためか遅かったのでsed
使うことにしました。
Gitのサブコマンド
gitのサブコマンドにしたい場合は、下のようにすればいいと思います。
[alias]
ls-dir = !"f(){ git ls-files | sed -e '/^[^\\/]*$/d' -e 's/\\/[^\\/]*$//g' | sort | uniq; }; f"