ファイルを検索して、peco って cd するやつ


Dockerfile を検索して、peco に流して、そのフォルダに cd するものを考えていたんですけれども、find だと検索対象フォルダを絞らないと検索が遅くて使い物にならないなぁと思っていた矢先。

peco + spotlightで超高速にファイル名検索して開く - Qiita

を発見!これだー!

ということで、spotlight(mdfind) を使ったやつを書いてみました。

.bashrc
peco-mdfind-cd() {
  local FILENAME="$1"

  if [ -z "$FILENAME" ] ; then
    echo "Usage: peco-mdfind-cd <FILENAME>" >&2
    return 1
  fi

  local DIR=$(mdfind -onlyin ~ -name ${FILENAME} | grep -e "/${FILENAME}$" | peco | head -n 1)

  if [ -n "$DIR" ] ; then
    DIR=${DIR%/*}
    echo "pushd \"$DIR\""
    pushd "$DIR"
  fi
}

peco-docker-cd() {
  peco-mdfind-cd "Dockerfile"
}

peco-vagrant-cd() {
  peco-mdfind-cd "Vagrantfile"
}
$ peco-mdfind-cd "Dockerfile"

で、
1. Dockerfile を検索し、
2. 一覧を peco に渡し、
3. 選択結果のフォルダに cd する
という流れです。

ちょっと名前が微妙ですが、alias を設定するなり、ショートカットキーを設定するなりして下さいませw

`.git` に対してもやりたかったんですけども、`mdfind` が不可視属性のものを対象に出来ないようなので、ちょっと無理っぽいです。。

追記:

peco-find-cd() {
  local FILENAME="$1"

  if [ -z "$FILENAME" ] ; then
    echo "Usage: peco-find-cd <FILENAME>" >&2
    return 1
  fi

  local DIR=$(find ~ -maxdepth 5 -name ${FILENAME} | peco | head -n 1)

  if [ -n "$DIR" ] ; then
    DIR=${DIR%/*}
    echo "pushd \"$DIR\""
    pushd "$DIR"
  fi
}

peco-git-cd() {
  peco-find-cd '.git'
}

peco-docker-cd() {
  peco-find-cd "Dockerfile"
}

peco-vagrant-cd() {
  peco-find-cd "Vagrantfile"
}