Comando 'up'

El otro día un compañero de trabajo me pasó este útil snippet de código. Permite subir en la jerarquía de carpetas en el terminal de manera cómoda. Añade el comando up a tu sesión, de forma que puedes subir un determinado número de niveles de golpe, o subir hasta un directorio determinado. Además, para facilitar su uso, soporta autocompletado con el nombre de los directorios que están por encima del nivel actual.

Como todo queda más claro con ejemplo os copio la siguiente sesión:

/usr/share/avahi/introspection$ up share
/usr/share$ cd -
/usr/share/avahi/introspection$ up 3
/usr$

Instalar dicho comando en nuestro sistema es muy fácil, son sólo dos pasos:

  1. Copiar la función a nuestro $HOME
  2. Añadir la función al .bashrc

Lo primero es copiar el código de la función a un fichero en el $HOME, por ejemplo en $HOME/.up_function.sh

# up function
# See http://daniele.livejournal.com/76011.html

#If you pass no arguments, it just goes up one directory.
#If you pass a numeric argument it will go up that number of directories.
#If you pass a string argument, it will look for a parent directory with that name and go up to it.

function up()
{
    dir=""
    if [ -z "$1" ]; then
        dir=..
    elif [[ $1 =~ ^[0-9]+$ ]]; then
        x=0
        while [ $x -lt ${1:-1} ]; do
            dir=${dir}../
            x=$(($x+1))
        done
    else
        dir=${PWD%/$1/*}/$1
    fi
    cd "$dir";
}

function upstr()
{
    echo "$(up "$1" && pwd)";
}

# List the available environments.
function show_up_options () {
    (pwd | tr / " ")
}

#
# Set up tab completion.  (Adapted from Arthur Koziel's version at
# http://arthurkoziel.com/2008/10/11/virtualenvwrapper-bash-completion/)
#
_ups ()
{
    local cur="${COMP_WORDS[COMP_CWORD]}"
    COMPREPLY=( $(compgen -W "`show_up_options`" -- ${cur}) )
}

complete -o default -o nospace -F _ups up
complete -o default -o nospace -F _ups upstr

Y lo siguiente y último es añadir al fichero $HOME/.bashrc las siguientes líneas:

# up function                                                                                         
source $HOME/.up_function.sh 

Ya sólo tendremos que abrir una nueva sesión del terminal para disponer de la función up.

Show Comments