Я колись зробив корисний сценарій для подібної мети, з функцією fcd для find-n-cd.
Ви набираєте fcd foo
і може статися 3 речі:
- Такого каталогу foo не знайдено, він повертається за допомогою
"no such directory " $1
- Знайдено один файл: він перевіряє, чи це каталог (чи просто файл), і якщо так, він там міститься.
- Знайдено декілька файлів - тоді подається вибір, де ви просто набираєте номер виділення (або спеціальний номер для повернення).
Він схожий тим, що вам не потрібно вводити весь шлях, але ви маєте чітко викликати функцію.
#!/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
}
Ви повинні source
функціонувати ( source fcd.sh
| . fcd.sh
) і не можете називати це сценарієм, тому cd
що в іншому випадку це трапиться лише в контексті сценарію, і після завершення ви негайно повернетеся до свого початкового режиму.
Оскільки він працює з ним locate
, він досить швидко шукає каталоги (але не завжди актуальні).
Він не граціозно обробляє пробіли в іменах каталогу. Якщо у вас є елегантне рішення проблеми, я був би радий.
shopt -s autocd
командний рядок у ньому. Тепер я можу просто почати вводити імена каталогів і використовувати автозаповнення, а потім натиснути return і оболонкуcd
в каталог. Так кльово !