LoginSignup
26
25

More than 5 years have passed since last update.

よく作業するDirをBookmarkするshellスクリプト

Last updated at Posted at 2014-03-05

はじめに

zshやbashで作業しているとよく移動するDirというのがあると思います。
また、久しぶりにLoginしたサーバでは、どこが大事なDirかを忘れてしまうこともあるかと思います。

そういうときに、よく使うDirをBookmark?しておくと便利です。

追記: 2014/3/20

@mollifier さんが作成したzshによるPluginは補完が効くので更に便利です!
よく使うディレクトリをブックマークする zsh のプラグイン

準備

下記のようなものを .zshrc.bashrcに書いておきます。
書いたら source ~/.zshrc などして読み込んでください。

.zshrc
BMRC=~/.bmrc
touch $BMRC

bmls() {
  cat $BMRC | sort -n
}

bmvi() {
  # open BMRC with EDITOR.
  ${EDITOR:-vi} $BMRC
}

bmadd() {
  local bmdir=$PWD
  local newid=$1

  if __bm_path_list | grep -F -x "$bmdir" > /dev/null; then
    echo "$bmdir is already in bm list" 1>&2
    return 2
  fi

  if [ -n "$newid" ]; then
    if __bm_id_list | grep -F -x "$newid" > /dev/null; then
      echo "$newid is already used as bm id" 1>&2
      return 3
    fi
  fi

  if [ -z $newid ]; then
    local maxid
    maxid=$(__bm_id_list | grep '^[0-9][0-9]*$' | sort -n -r | head -1)
    if [ -n "$maxid" ] && [ "$maxid" -ge 1 ]; then
      newid=$((maxid + 1))
    else
      newid=1
    fi
  fi

  echo "$newid|$bmdir" >> $BMRC
}

bm() {
  local bmid=$1
  if [ -z "$bmid" ]; then
    bmls
    return
  fi

  local bmdir=$(__bm_get "$bmid")
  if [ -z "$bmdir" ]; then
    echo "$bmid is not in bm list" 1>&2
    return 1
  fi

  cd "$bmdir"
}

__bm_get() {
  escaped_bmid=$(echo "$1" | sed -e 's/[^a-zA-Z0-9<>]/\\&/g')
  cat $BMRC | grep -E "^${escaped_bmid}\\|" | cut -d '|' -f 2 | head -n 1
}

__bm_path_list() {
  cat $BMRC | cut -d '|' -f 2
}

__bm_id_list() {
  cat $BMRC | cut -d '|' -f 1
}

使い方

現在のDirをBookmark?に登録

bmadd <name> で登録します。

% bmadd idea

Bookmark登録されているDirの一覧を表示

bmとだけ打つと一覧が表示されます。

% bm
doc|/Users/k_morishita/Documents
down|/Users/k_morishita/Downloads
idea|/Users/k_morishita/IdeaProjects

そのDirに移動

bm <name> で移動します。

% bm doc

Bookmarkを編集

仕組みは単に ~/.bmrc にテキストファイルとして保存してあるだけです。
bmviと打つとそのファイルを編集する vi が起動します。何をどうすれば良いかは見ればわかると思います。

% bmvi

さいごに

10年以上前に書いたShellスクリプトなので拙い感じがアリアリですが、動くには動くのでお試し下さい。

26
25
4

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
25