Вот функция, которая делает то, что вы хотите:
cdto () { cd "${PWD%/$1/*}/$1"; }
Вот еще один удобный:
c2 () {
        local path num
    if (($# != 0))
    then
        path='./'
    fi
    if [[ -z ${1//.} ]]
    then
        num=${#1}
    elif [[ -z ${1//[[:digit:]]} ]]
    then
        num=$1
    else
        echo "Invalid argument"
        return 1
    fi
    for ((i=0; i<num-1; i++))
    do
        path+='../'
    done
    cd $path
}
Использование:
c2 .    # same as cd .
c2 ..   # same as cd ..
c2 ...  # same as cd ../..
c2 3    # also same as cd ../..
c2      # same as cd (which is the same as cd ~)
Я думал, что у одной из оболочек была кумулятивная функция точка-точка-точка (я даже сейчас проверил Vista, и у нее ее не было, хотя Google утверждает, что некоторые версии Windows поддерживают ее).
редактировать
Недокументированная особенность Bash заключается в том, что в именах функций допустимо множество символов. В результате вы можете сделать это:
.. () { cd ..; }
... () { cd ../..; }
.... () { cd ../../..; }
..... () { cd ../../../..; }