ログとかからファイルのフルパスをコピペしてそのファイルのあるディレクトリへcd
したいことってよくありますよね?そんなときこの記事タイトルのようなことをやった経験が誰にもあると思います。少なくとも僕はよくやるし、長いファイル名をBS連打で削るのがもう嫌です。
cd先がファイルだったらそのファイルがあるディレクトリに行きたいって思ってるに決まってるじゃん。分かるでしょ?だからもう勝手にファイル名削ってcdしちゃってよ!
って夢が叶うのが以下の設定です。
~/.bashrc
# cd file でそのfileのあるディレクトリに移動する
function cd() {
if [[ -e $1 && ! -d $1 ]]; then
builtin cd -- "$(dirname -- "$1")"
else
builtin cd "$@"
fi
}
この結果…
# httpd.confを弄ろう…
$ sudo vim /etc/httpd/conf/httpd.conf
# ちょっとヒストリ1個戻ってconfディレクトリに行きたいな…
$ cd /etc/httpd/conf/httpd.conf
# しまったファイル名のままcdしちまった
# あれ? エラーが出ない…だと!?
$ pwd
/etc/httpd/conf
# これは楽ちん!