Edited at

gitの管理下にあるディレクトリ一覧を取得する

More than 3 years have passed since last update.

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"