LoginSignup
26
27

More than 5 years have passed since last update.

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

Last updated at Posted at 2014-06-25

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"
}
26
27
8

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
26
27