2020-01-21
この記事では cdr から不要なディレクトリを削除する方法を紹介します。
cdr は zsh に入っているコマンドで、過去に開いたディレクトリへ移動できるコマンドです。
普段は cdr をラップした 
しかし cdr は rm や mv (rename) したディレクトリをキャッシュしていなくて残ってしまってるようです。
そこでキャッシュから存在しないディレクトリを一掃してみます。
手順 1. キャッシュファイルの場所を確認する
$ zstyle を実行して recent-dirs-file があればそこです。
デフォルトは ~/.chpwd-recent-dirs です。

なにやら見慣れぬ形式で入っていました。
手順 2. 削除するシェル
1 行ずつ「ディレクトリが存在するか?」を見ます。 そして、無ければ消すシンプルなシェルを書きます。
Gist:
Clean no exists directories
https://gist.github.com/elzup/4d36336470d18ae9e6216d5276f19cbd#!/bin/sh
cat ~/.chpwd-recent-dirs \
  | sed -e 's/^..\(.*\)./\1/g' \
  | while read line
do
  if [ -d "$line" ]; then
    echo "\$'$line'"
  fi
done$ chmod +x cdr-recent-dirs-clearn.sh
$ bash cdr-recent-dirs-clearn.sh > .chpwd-recent-dirs-clearn
$ vimdiff ~/.chpwd-recent-dirs .chpwd-recent-dirs-clearnvimdiff で確認すると存在しないディレクトリがちゃんとなくなっていそうです。

$ mv .chpwd-recent-dirs-clearn ~/.chpwd-recent-dirsよければ replace します。そして cdr に引っかかっていた 存在しないパスも消えました!
