Volte diretórios bem rápido (ou, um "cd .." tunado!)
TL;DR você vai conseguir fazer isso:
Intro
Se você desenvolve software, é possível que aprecie a linha de comando como uma ferramenta de produtividade. Este é o meu caso, e algumas ferramentas que facilitam minha vida de desenvolvedor incluem: vim
, tmux
e zsh
.
Uma coisa que eu gosto no zsh
é o atalho ..
para voltar 1 diretório. Assim:
$ pwd
~/dev/teach/blog
$ ..
$ pwd
~/dev/teach
Apenas evita ter que digitar o comando cd ..
completo, mas é muito útil!
O que faltava
O que eu queria, no entanto, era uma maneira de voltar N diretórios. Para que eu pudesse fazer isso:
$ pwd
~/dev/teach/blog
$ .. 2
$ pwd
~/dev
Então eu criei fastnav_up
, uma função em shell script que faz exatamente isso.
É bem simples:
fastnav_up() {
# if no parameters, navigate up only 1 directory and stop
[ -z "$1" ] && cd .. && return 0
# filter parameter $1, should contains only numbers
[ "$( echo $1 | sed "s/[0-9]*//g" )" ] && echo "\$1 must be a number" && return 1 || n=$1
dirs_up=
for i in $(seq $1); do
dirs_up+="../"
done
cd $dirs_up
return 0
}
alias ..="fastnav_up"
Observe que o bash não nos permite usar o caractere ponto (.
) dentro de um nome de função, mas isso pode ser facilmente superado com um alias
:)
E simplesmente funciona! Na verdade, eu criei isso há alguns anos, e tem me salvado muito tempo desde então.
Eu quero mais
Tudo bem, o novo .. 2
é legal, mas e se eu quisesse contar de trás pra frente?
Tipo, se eu estiver em um caminho muito longo, pode ser difícil contar quantos diretórios subir.
Para isso eu criei o fastnav_down
(alias para ,,
), que funciona assim:
$ pwd
~/dev/teach/blog/resources/_gen/images
$ ,, 1
$ pwd
~/dev/
O código também é simples:
fastnav_down() {
[ "$( echo $1 | sed "s/[0-9]*//g" )" ] && echo "\$1 must be a number" && return 1 || n=$1
# separate path components into a string array
a=( $(echo $(pwd) | sed "s;\/; ;g") )
((n+=2)) # we are starting from /home/<your-user>/
dir=$(echo "${a[@]:0:$n}" | sed "s; ;\/;g") # slice the array and put slashes back
cd /$dir
return 0
}
alias ,,="fastnav_down"
Aproveite!
Se você achou isso útil, pode querer adicionar os ..
e ,,
melhorados ao seu .bashrc
(ou .zshrc
, etc.). Uma versão comentada deles está disponível neste github gist, e uma maneira automatizada de adicioná-la é:
$ wget https://gist.githubusercontent.com/geonnave/335fa20e82a19d9fb177d65e27828fe2/raw/709a98cdb6b6b514b66c31a6cab4af41f99a3793/fastnav.sh && chmod +x fastnav.sh && echo "source $(pwd)/fastnav.sh" >> $HOME/.bashrc
(nota: se você estiver usando zsh
, mude .bashrc
para .zsh
)
Post originalmente publicado aqui (em inglês).
Então eu criei fastnav_up, uma função em shell script que faz exatamente isso. É bem simples:
Muito massa esse script!
Só por curiosidade tem o comando cd -
que é bastante útil para voltar ao diretório anterior.
Excelente post!
Só uma curiosidade: é possível voltar mais de um diretório com o ..
. Basta adicionar a quantidade que deseja. Ex:
$ pwd
~/dev/teach/blog/resources/_gen/images
$ ....
$ pwd
~/dev/teach/blog
Mas a sua solução é realmente bem mais prática, principalmente com ,,
. Valeu!
eu estou com uma build de arch aqui, monstar foi um saco, perdi algumas horinhas com o cd ~, vlw dms pela dica!