Я люблю быть прагматичным, и поскольку написание завершения zsh находится за пределами моих текущих навыков, я просто напишу специальную функцию, используя select
систему меню из zsh (и bash).
cdd(){
typeset dir
typeset -a dirs
if [[ $PWD =~ ^(.*)(/back-[0-9-]+T[0-9_]+/)(.*)$ ]]
then for dir in "$match[1]"/*/"$match[3]"
do [ "$dir" != "$PWD" -a -d "$dir" ] && dirs+=("$dir")
done
select dir in "$dirs[@]"
do echo "$dir"
cd "$dir"
break
done
else echo "no date in $PWD"
fi
}
Это разбивает текущий каталог на три части вокруг каталога с шаблоном даты, а затем заменяет его на glob *
. Полученный список представляется zsh в виде 1) ... 2) ...
, где вы просто вводите 1 или 2, чтобы перейти в этот каталог.