LoginSignup
1

More than 5 years have passed since last update.

カレントディレクトリと一部分だけが違うディレクトリに cd するのを効率化してみた

Last updated at Posted at 2016-08-08

例えば以下のようなディレクトリ構成があって

$ tree

├── android
│   └── resource
│       └── images
│           └── webview
└── iphone
    └── resource
        └── images
            └── webview

今、 android/resource/images/webview にいて、

androidの作業が終わったからiphoneの方の resource/images/webview ディレクトリに移動したい、

という場合に効率的に移動できる方法を考えてみました。

パターン1: ../ って打ちまくる

$ pwd
/pass/to/some/directory/android/resource/images/webview

$ cd ../../../../iphone/resource/images/webview

$ pwd
/pass/to/some/directory/iphone/resource/images/webview

・・・あまりイケてないですね。。。
まだ4階層くらいならタイプする気にもなりますが、深くなればなるほど何回 ../ って打たなきゃいけないのかよく分からなくなり、非効率です。

パターン2: pwd と sed を使う

$ pwd
/pass/to/some/directory/android/resource/images/webview

$ cd `pwd | sed -e "s/android/iphone/g"`

$ pwd
/pass/to/some/directory/iphone/resource/images/webview

ちょっと楽になりました。これなら階層に関係なく簡単に移動ができます。
が、いちいち コーテーションやパイプ等の記号をタイプするのが面倒です。もう少し楽にしたいところです。

パターン3: bashrc に関数を登録する。

今回の本題です。パターン2で作ったコマンドを、関数登録することでさらに使いやすくします。

.bashrc
function cdsed() {
  cd `pwd | sed -e "s/$1/$2/g"`
}
$ source ~/.bashrc
$ pwd
/pass/to/some/directory/android/resource/images/webview

$ cdsed android iphone

$ pwd
/pass/to/some/directory/iphone/resource/images/webview

だいぶ楽になりました!
これなら変更したい文字列をタイプするだけで済みますね。

まとめ

ちょっとしたことではありますが、マルチプラットフォームのサービスを開発・運用していると、プラットフォームでディレクトリが区切られていて、さらにその下の深い階層で作業して、戻って別のプラットフォームの同じディレクトリで同じ作業して、ということが少なからずあったりします。

そんなときに、なんとか ../ をタイプしまくらなくて良い方法はないかな、と思って考えついたのが上記の工夫です。

「こんなことしなくてももっと良い方法があるよ!」という情報がありましたら、コメントいただけるととても嬉しいです!


ちなみに、上記のコマンドはパスの中に変換したい文字列が2回以上出てくると全て置換してしまいます。
あまりそのようなパターンに出会ったことがなく、両方置換してしまうのが良いのか、何番目を置換する、みたいに選択できた方が良いのか判断つかなかったので、この記事に載せる段階では一旦「全て置換する」ように作っています(それが一番シンプルなので)。

そのあたりは用途に応じて関数の中身を書き換えていただければ、と思います。

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
1