Как насчет этого?
function j() { for dir in ~/projects/$@*; do if [ -d $dir ]; then cd "$dir"; fi; done ;}
Он находит ближайшее возможное совпадение. Итак, скажите, что у меня есть список таких записей:
~/projects/
~/projects/apples/
~/projects/apples-and-pears/
~/projects/cabbage/
j a будет соответствовать обеим apples* dirs, но по мере того, как apples-and-pears будет позже, он будет cd в последний, и именно там вы В конце концов (недостаток этой функции). j c поместит вас в ~/projects/cabbage/.
Заглушите это в терминал, чтобы проверить его, и когда вы счастливы, просто проложите его в конце ~/.bashrc.
] Edit: Я также играл вокруг создания варианта find, но это не так хорошо (медленнее и менее точно). Не стесняйтесь взламывать его, хотя.
function j() { cd $(find ~/projects -maxdepth 1 -type d -name "$@*"); }