Turbinando o comando CD e facilitando a navegação entre diretórios pelo terminal

Se você, como eu, está sempre em busca de facilidades para reduzir o esforço na linha de comandos, então esta dica lhe será muito útil para navegação em estruturas de diretórios muito grandes.

Eu já uso estas funções há alguns anos e garanto que o ganho na sua produtividade será imenso sem que isso altere sua rotina de trabalho.

A vantagem da implementação na forma de funções shellscript é que assim elas podem ser facilmente adicionadas ao “~/.bashrc” ou qualquer outro arquivo de inicialização do seu terminal e você já poderá sair usando sem dificuldades.

Função para navegar através do histórico de pastas recentes

Imagine que você acessa determinados diretórios com bastante frequência e que por terem um caminho muito longo você sempre esquece os endereços.

Por exemplo. Imagine que ao menos uma ou duas vezes, todos os dias, você acesse o endereço “/var/www/intranet/publicacoes/relatorios/publicos”.

Digitar este caminho todas as vezes não é muito produtivo, é!? Vamos começara melhor isso então. Abra o seu terminal e digite ou cole o código a seguir:

# Acessa diretórios recentes usando REGEX
# Welington R. Braga (2019)
# -l exibe o path completo do diretório, ao invés de acessá-lo de fato
# Depende da função "cd" personalizada
cd-r() {
  FOLDER="$1"
  if [ "$1" == "-l" ]; then
    FOLDER="$2";
  fi
  REALPATH=$(awk '/'${FOLDER/\//\\/}'$/ { last=$0 } END { if (last == "") { print "Diretorio ['${FOLDER}'] nao identificado"; } else { print last; } }' ~/.cd.history )
  if [ "$1" == "-l" ]; then
    echo "${REALPATH}";
  else
    cd "${REALPATH}";
  fi
}

A sua finalidade é identificar os diretórios que já acessamos através do registro no arquivo .cd.history, que será criado no seu HOME. Mas como este arquivo não é criado e nem atualizado por esta função, ela ainda não funciona sem o complemento a seguir.

Função cd modificada

A função acima é complementada com essa aqui. Uma sobreposição da função “cd” original do bash, que acrescenta mais simplicidade a função original e também “dá vida” a função “cd-r” que vimos antes.

# Melhora a função cd
# Welington R. Braga (2019)
# Acrescenta um log de acessos e retorno de níveis infinitos até a raiz
cd() {
  if [[ "$1" =~ ^.{1,}$ ]]; then
    LASTPWD="${PWD}"
    for (( i=0; i<$(( ${#1} - 1 )); i++ )); do
      builtin cd ..
    done
    OLDPWD="${LASTPWD}"
  elif [[ "$1" =~ ^\?.*$ ]]; then
    NEWPWD="$1"
    cd-r ${NEWPWD:2}
  else
    builtin cd "$@"
  fi
  echo $PWD >>~/.cd.history
}

Navegando nos diretórios com as novas ferramentas

Você não mudará muito a sua rotina de trabalho. O uso do cd permanece normal para aquilo que você já fazia antes Por exemplo:

Acessar o seu diretório HOME e; em seguida, o diretório com os arquivos de cache do apt:

cd ~
cd /var/cache/apt/archives

As diferenças começam a partir daqui. Digamos que você queira voltar ao diretório “cache”… se eu dissesse para voltar ao diretório “apt” você certamente voltaria com “cd ..” mas para voltar até o “cache” isso não é possível, ou melhor, não era.

Com a mudança que fizemos, você pode usar tantos “.” (ponto) quanto necessário para voltar cada nível da estrutura. Então para subir até o “cache” eu usaria o seguinte comando:

cd ...

Não existia no “cd” original a opção de usar “três pontos”, agora existe. Isso é muito mais prático e rápido do que digitar “cd /var/cache” ou então “cd ../..”

E não para por ai. A quantidade pontos a serem usadas é limitada apenas ao número de saltos até a raiz. Por exemplo, suponhamos que eu acessei o diretório “publicos”, abaixo, e depois de alguma atividade eu quero voltar até “intranet”, da mesma estrutura. Como eu quero subir 4 níveis basta usar 4 pontos.

cd /var/www/intranet/publicacoes/relatorios/publicos
cd ....

Agora você pode voltar a o seu home como normalmente faz:

cd ~

Perceba que o “cd” continua funcionando normalmente, mas ainda há mais uma novidade. Digamos que você precise retornar ao diretório archive.

Ao invés de digitar todo o caminho novamente, você fará assim:

cd ?archives

Pronto, você está de volta ao diretório “/var/cache/apt/archives” sem ter digitado todo o caminho. Muito mais simples, não!?

Se quiser retornar ao diretório “publicos” faria a mesma coisa:

cd ?publicos

Fazendo tudo funcionar “pra sempre”

Nós apenas digitamos as funções no terminal e as usamos nesta sessão. Se você abrir outra sessão de terminal estas funções não estarão mais disponíveis. Para que isso seja possível você deverá salvar tudo no seu arquivo de inicialização do Bash que normalmente é o ~/.bashrc.

Usando então um editor de sua preferência, abra este arquivo, cole o código das funções no final do código que já existe lá, salve e feche-o. A partir daqui as funções estarão disponíveis em todas as suas sessões.

Limitações

Nem tudo são flores e funciona muito bem. Do jeito que estão elas tem me atendido há alguns anos, mas eu já me conformei com alguns bugs que não são críticos mas fariam alguém dizer que elas não são profissionais, ou bugadas; a própria construção das funções poderia ter ser simplificado em uma só, mas enfim, isso fica para um futuro quando estiver disponível, ou se você, nobre leitor, estiver disposto, faça suas alterações e compartilhe, certamente será muito bem-vindas.

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Esse site utiliza o Akismet para reduzir spam. Aprenda como seus dados de comentários são processados.