【Macターミナル】よく使うフォルダだから、とにかく楽して移動したい

よく使うフォルダだから、とにかく楽して移動したい

あー、楽したい、楽してコンピュータを操作したい、という気持ちで日々を生きている。
 なにが面倒くさいといって、ターミナルにパスを入力する時である。

よく使うパスを呼び出す

筆者の場合、だいたい使うフォルダは決まってる。
 だとしたら、あらかじめ、どこかに記録しておいて、すぐに呼び出せるようにすればいいのではないか。
 そこで以下のようなシェルスクリプトを考えてみた。

シェルスクリプト

📝 snip

#!/bin/zsh

listfile=~/bin/.sniplist

function edit_list() {
    echo 'キーワードは?'
    read key\?'> '
    echo '呼び出したい文字列は?'
    read str2\?'> '
    echo "$key"'='"$str2" >> $listfile
    echo '登録しました'
    exit 0
}

if ! test -e $listfile; then
    echo '-e' > $listfile
    edit_list
fi

if test $# -gt 1; then
    echo 'このスクリプトで使用できる引数はひとつだけです。'
    exit 0
elif test $# -eq 0; then
    cat $listfile
    exit 0
fi

if test $1 = '-e'; then
    edit_list
fi

if test $1 = '-n'; then
    nano $listfile
fi

while read line
do
    key=$(echo $line | awk -F "=" '{print $1}')
    if test $key = $1; then
        str=$(echo $line | awk -F "=" '{print $2}')
        echo -n "$str:q" | pbcopy
        echo -n "$str:q"
        break
    fi
done < $listfile

どこかに(上記の例では~/bin/.sniplist)に「.sniplist」というテキストファイルを作り、そこにキーワードとパスを記載しておく。パスが必要になったら、
 snip キーワード
 でパスを呼び出す、というスクリプトだ。

使い方

たとえば、
 /Users/username/Pictures/よく使うファイル/タイトル系/一応とっとく
 というパスをよく使うとする。

snip -e
 とやれば、対話的にキーワードと登録したい文字列を訊かれる。ここではキーワードを「tt」とした。「とっとく」の略だ。
 文字列として先ほどのパスを入力する。

$ snip -e
キーワードは?
> tt
呼び出したい文字列は?
> /Users/username/Pictures/よく使うファイル/タイトル系/一応とっとく

あとは、
 snip tt
 で、/Users/username/Pictures/よく使うファイル/タイトル系/一応とっとくという文字列を返し、さらにクリップボードにコピーする。
 snipだけだと、sniplist の内容を表示する。
 また、snip -nで、nano というエディタで sniplist を編集できる。

これでcd $(snip tt)で移動できるし、open $(snip tt)で Finder で開けるようになる。
 なることはなる。しかし、まだ面倒臭い。

そこで~/.zshrcに、
 ccd () { cd $(snip $1) }
 などと書きこむ。
 これでccd ttだけで移動できるようなった。
 なったのだが、これだけだとスペースを含むパスで思うように動作しない。
 この問題は eval コマンドで解決する。

📝 ~/.zshrc

ccd () {eval cd $(snip $1) }
mmv () {eval mv $1 $(snip $2) }
opn () {eval open $(snip $1) }

こうしてやればmmv ファイル ttでファイルを移動できるし、opn ttでフォルダを開けるようになる。スペースを含むパスでも大丈夫だ。