LoginSignup
2
2

More than 5 years have passed since last update.

[cmd.exe]rubyで再帰的にディレクトリ探索したパスをpecoに渡してディレクトリ移動

Last updated at Posted at 2016-04-14

モチベーション

pecoで再帰ディレクトリ探索したパスに移動したい!

aaa.gif

ruby script

以下はpecoにディレクトリ一覧を渡して、pecoがディレクトリを吐くまでのスクリプトです。これをcdとかに食わしてやるとディレクトリ移動ができるかと。

directory-search.rb
def search_dir(cur_dir)
    dirs = Dir.glob(File.join(cur_dir, "*")).map { |e|
        e.force_encoding("UTF-8") if File.directory?(e)
    }.compact

    unless dirs.empty?
        $io.puts dirs
        dirs.each do |sub_dir|
            search_dir(File.join(sub_dir))
        end
    end
end

begin
    $io = IO.popen("peco.exe", "w")
    search_dir(".")
rescue
ensure
    $io.close
end

glob("**/*")で再帰探索できるよ?

起動時一発目がなんかおそかったので。。できるだけpecoを早く起動して、フィルタリングしてる最中に探索してくれればいいかなという思想です。

バッチファイルでやれよ

@echo off
dir /b /s | findstr /v /r \\\. | iconv -f CP932 -t UTF-8 | peco

というバッチファイルを組んで始めはやってたんですが、変に文字化けしたファイルが大量にあったりしてiconvが変換できずに途中で止まってしまう問題がありまして。。

あと、ディレクトリだけ取る方法がパッと思いつかず。rubyなら思いついたっていうのがrubyで書いた一番の理由です。

ディレクトリ移動する為のバッチスクリプト

directory-search.rbのパスはお好きな場所に変更して頂ければ良いかと。

@echo off

for /f "delims=" %%i in ('ruby %USERPROFILE%/directory-search.rb ^| iconv -f UTF-8 -t CP932') do (
        cd ^"%%i^"
        break
)

参考資料

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2