Una vez hice un script útil para un propósito similar, con una función fcd para find-n-cd.
Escribe fcd foo
y pueden suceder 3 cosas:
- No se encuentra ese directorio foo, luego regresa con
"no such directory " $1
- Se encuentra un archivo: prueba si es un directorio (o simplemente un archivo) y, de ser así, está allí.
- Se encuentran varios archivos, luego se presenta una selección, donde simplemente escribe el número de la selección (o un número especial para la devolución).
Es similar porque no necesita que escriba la ruta completa, pero ha llamado explícitamente a la función.
#!/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
}
Debe utilizar source
la función ( source fcd.sh
| . fcd.sh
) y no puede llamarla como secuencia de comandos, porque de cd
lo contrario solo sucedería en el contexto de la secuencia de comandos, y después de terminar, volvería a estar en su directorio de inicio inmediatamente.
Como funciona con locate
, es bastante rápido encontrar directorios (pero no siempre está actualizado).
No maneja espacios en blanco en los nombres de directorio con gracia. Si tiene una solución elegante para el problema, sería feliz.
shopt -s autocd
en la línea de comando en que funcionó. Ahora puedo comenzar a escribir nombres de directorio y usar autocompletar y luego presionar Intro y el shellcd
en el directorio. Muy guay !