Aquela ajuda para entrar na pasta do projeto!

Exemplo:

$ cdp blog
$ pwd
/home/usuario/public_html/blog
$ cdp tema_wordpress
$ pwd
/home/usuario/public_html/wordpress/wp-content/themes/tema_wordpress

Códigos

Meu caminho para os scripts: ~/Apps/sh

Arquivo ~/.bashrc:

#
# cdp.sh
#
export CDP_PATHS=( "$HOME/public_html/wordpress/wp-content/themes" "$HOME/public_html" )
alias cdp='. ~/Apps/sh/cdp.sh'
source ~/Apps/sh/cdp_complete.sh # Autocompletar projeto com a tecla tab

Arquivo ~/Apps/sh/cdp.sh:

#!/bin/sh

if [ -z "$CDP_PATHS" ]
then
  echo '> É necessário definir as pastas onde seus projetos estão guardados.'
  echo '  Utilize o comando:'
  echo $'\texport CDP_PATHS=( "$HOME/projetos" "$HOME/outros_projetos" )'
  echo ''
  echo '  Inclua a linha acima no arquivo ~/.bashrc para não precisar repetir'
  echo '  este processo.'$'\n'

  return
fi

paths=${CDP_PATHS[*]}

if [ -z "$1" ]
then
  read -p '> Qual projeto? ' project
else
  project=$1
fi

for path in ${paths[@]}
do
  folder="$path/$project"
  
  if [ -d $folder ]
  then
    echo "> Entrando em $folder"$'\n'

    cd $folder
    break
  fi
done

if [ ! -d $folder ]
then
  echo '> Projeto não encontrado nas pastas:'
  for path in ${paths[@]}
  do
    echo "  $path"
  done
  echo ''
fi

Arquivo ~/Apps/sh/cdp_complete.sh:

paths=${CDP_PATHS[*]}

_cdp() {
  # declare variable 'cur' (holds string to complete) as local
  local cur

  # initialize completion (abort on fail)
  _init_completion || return

  projects=()
  for path in ${paths[@]}
  do
    if [ -d $path ]
    then
      projects+=( $(ls -d $path/*/ | xargs -l basename) )
    fi
  done
  projects_str=$( printf "%s " "${projects[@]}" )
  COMPREPLY=( $( compgen -W '$projects_str' -- "$cur" ) )
} && complete -F _cdp cdp

TODO

  • Melhorar a documentação
  • Lista de pastas ignoradas (exemplo: tmp, public)