Certa vez, criei um script útil para um objetivo semelhante, com uma função fcd para find-n-cd.
Você digita fcd foo
e 3 coisas podem acontecer:
- Nenhum diretório foo é encontrado, então ele retorna com
"no such directory " $1
- Um arquivo foi encontrado: ele testa se é um diretório (ou apenas um arquivo) e, se for o caso, ele faz o cd lá.
- Vários arquivos são encontrados - em seguida, é apresentada uma seleção, onde você apenas digita o número da seleção (ou um número especial para devolução).
É semelhante, pois não precisa digitar o caminho inteiro, mas você chamou a função explicitamente.
#!/bin/bash
#
# find cd. For input foo, find all directories .../.../foo
# GPLv3 Stefan Wagner (2010, 2012)
#
# doesn't handle blanks in directory names gracefully.
#
fcd ()
{
list=$(locate $1 | egrep "/$1$")
count=$(echo $list | wc -w )
case $count in
0)
echo "unknown directory: "$1 && return
# could search for partial matches Doc => Documentation
;;
1)
if [[ -d "$list" ]]; then
echo "$list";
cd "$list";
else
echo "not a directory: $1"
fi
;;
*)
select directory in $list "/exit/"
do
if [[ "$directory" = "/exit/" ]]; then break; fi
if [[ -d "$directory" ]]; then
echo "$directory";
cd "$directory";
break
else
echo "not a directory: "$1
fi
done
;;
esac
}
Você tem source
a função ( source fcd.sh
| . fcd.sh
) e não pode chamá-la como script, porque cd
só aconteceria no contexto do script e, após o término, você voltaria ao seu diretório inicial imediatamente.
Como funciona locate
, é bastante rápido em encontrar diretórios (mas nem sempre atualizados).
Ele não trata espaços em branco nos nomes de diretório normalmente. Se você tiver uma solução elegante para o problema, eu ficaria feliz.
shopt -s autocd
na linha de comando e funcionou. Agora posso começar a digitar os nomes dos diretórios e usar o preenchimento automático e pressionar return e os shellcd
no diretório. Tão legal !