Como já atendi em um no UnixSE, eu uso um script chamado z [github] para isso.
Ele lembra os diretórios para os quais você clicou, classifica-os de acordo com a frequência (frequência + recência) e permite que você mude para um dos caminhos lembrados usando alguma parte de seu nome.
Depois de ter cd'ed para um diretório, pelo menos, uma vez que você pode fazer, por exemplo, em vez de:
$ cd ~user/very/long/path/with/many/subfolders/
Basta fazer:
$ z sub
que funcionará, usando correspondência parcial de nomes (supondo que você não tenha outro diretório contendo em seu caminho o termo sub e que tenha uma maior freqüência).
Eu também defini uma função como essa, que primeiro tenta um cd normal e, se falhar, usa z:
function cd() {
builtin cd "" 2> /dev/null || z "" || (echo "cd: File or Directory not found: " >&2 && exit 1)
}
Isso lhe dá o melhor de ambos. Se a pasta estiver no diretório atual ou for dado um caminho completo válido, ela irá apenas cd lá, mas se não, ele tentará encontrar uma correspondência no banco de dados e cd lá. Isso tira a (pequena) dor de algumas vezes ter que usar cd (para treinar o banco de dados, indo para uma pasta que você nunca esteve antes) e às vezes lembrando de usar z, quando aplicável.