Não use a solução commandlinefu da outra resposta : é insegura¹e ineficiente.² Em vez disso, se você está usando bash
, apenas use as seguintes funções. Para torná-los persistentes, coloque-os no seu .bashrc
. Note que eu uso glob order porque é embutido e fácil. Em geral, a ordem de glob é alfabética na maioria das localidades. Você receberá uma mensagem de erro se não houver nenhum diretório próximo ou anterior para ir. Em particular, você verá o erro se tentar next
ou prev
no diretório raiz, /
.
## bash and zsh only!
# functions to cd to the next or previous sibling directory, in glob order
prev () {
# default to current directory if no previous
local prevdir="./"
local cwd=${PWD##*/}
if [[ -z $cwd ]]; then
# $PWD must be /
echo 'No previous directory.' >&2
return 1
fi
for x in ../*/; do
if [[ ${x#../} == ${cwd}/ ]]; then
# found cwd
if [[ $prevdir == ./ ]]; then
echo 'No previous directory.' >&2
return 1
fi
cd "$prevdir"
return
fi
if [[ -d $x ]]; then
prevdir=$x
fi
done
# Should never get here.
echo 'Directory not changed.' >&2
return 1
}
next () {
local foundcwd=
local cwd=${PWD##*/}
if [[ -z $cwd ]]; then
# $PWD must be /
echo 'No next directory.' >&2
return 1
fi
for x in ../*/; do
if [[ -n $foundcwd ]]; then
if [[ -d $x ]]; then
cd "$x"
return
fi
elif [[ ${x#../} == ${cwd}/ ]]; then
foundcwd=1
fi
done
echo 'No next directory.' >&2
return 1
}
¹ Não manipula todos os nomes de diretórios possíveis. A análise da saída ls
nunca é segura .
² cd
provavelmente não precisa ser muito eficiente, mas 6 processos são um pouco excessivos.