For navigational needs like this, I use a simple but perhaps more generalized solution: I setup an alias utilizing a fuzzy selection tool (e.g. pick: https://github.com/thoughtbot/pick, but there are numerous others -- fzf, c.f: http://junegunn.kr/2014/04/fzf+vim+tmux/).
The neat trick is to pass the contents of find to the fuzzy selector tool, for example:
cd $(find ~/path/to/clients/ -maxdepth 1 -type d | pick )
Then, you can alias that in your .rc (I like to use 2 mnemonic for these kinds of aliases):
2cli='cd $(find ~/path/toclients/ -maxdepth 1-type d | pick)
Typing '2cli' will cd you to the client of you choice from any starting location.
This approach has changed my core navigation in shells. It effectively generalizes the popular vim plugin Command-T for the shell. For instance, when working in git, I use the following alias to change branches:
alias gb='git checkout $(git branch -a | pick)'
Another example is to open and edit some src file which you don't quite recall its name that is somewhere in deep nest of directories but again where you don't quite remember:
alias pf="find . \( ! -regex '.*/\..*' \) -type f | pick "
vim $(pf)
Here, the pf alias ('pick file') quickly builds a collection of files in the directory where the cmd is invoked, excluding hidden directories, and lets you fuzzy select a filename to be sent to stdout. Using this alias in conjunction with an editor like vim, allows you find and open a file you've selected with just one alias -- this combines the command act of finding, cd'ing, and opening a file in one fell swoop.
To be clear, there is nothing new here--fuzzy selection tools are popular and there numerous implementations of them (in Go, Haskell, python, ruby, etc.), each with their own dis/ad-vantages. I am merely passing on my workflow/movement aliases which I believe solve your particular need as well provide a generalize-able approach.