Я был только в лекции, где я заметил, что лектор, использующий команду (вероятно, искаженный), перешел к определенной папке.
Пример:
~/code$ j sciproj
~/projects/sciproj2011/$
Это выглядело довольно гладким, таким образом, я начал задаваться вопросом:
Действительно ли это - стандартная утилита, и если так, каково имя?
У меня есть две теории относительно того, как это работает:
Это может и создать, удалить и перейти к псевдонимам непосредственно от командной строки в стиле примера, не имея необходимость настраивать псевдонимы в конфигурационном файле или сценарии или этажерке вручную.
Это ищет корневой каталог папку, соответствующую имени и переходам к нему.
Вторая опция кажется немного медленной, однако, таким образом, первое было бы предпочтено.
Как дополнение к комментарию sagarchalise:
Это в natty: http://packages.ubuntu.com/natty/autojump
Должно работать в старых версиях а также.
Как насчет этого?
function j() { for dir in ~/projects/$@*; do if [ -d $dir ]; then cd "$dir"; fi; done ;}
Он находит ближайшее возможное совпадение. Итак, скажем, у меня есть каталог dir, подобный следующему:
~/projects/
~/projects/apples/
~/projects/apples-and-pears/
~/projects/cabbage/
j a
будет соответствовать обоим apples*
каталогам, но поскольку apples-and-pears
более поздний, он перейдет в этот последний, и вот где в конечном итоге (недостаток в этой функции). j c
поместит вас в ~/projects/cabbage/
.
Вставьте это в терминал, чтобы проверить его, и когда вы счастливы, просто положите его в конце ~/.bashrc
.
Редактировать: я также играл над созданием варианта find
, но он не так хорош (медленнее и менее точен). Не стесняйтесь взломать с ним все же.
function j() { cd $(find ~/projects -maxdepth 1 -type d -name "$@*"); }
Обычно вы можете использовать popd
, pushd
и dirs
для перехода между некоторыми папками. Но в вашем случае это некоторый пользовательский псевдоним, который вы можете определить в файле ~ / .bash_profile.
Например:
# Change dir via find
# Usage: cdf (dir)
cdf() {
pushd $(find . -name $1)
}
А затем cdf some_dir
перейдет в папку, игнорируя подкаталоги.
Пример реального поиска точных имен папок (игнорировать подсказку):
~/$ cdf() { pushd $(find . -name $1); }
~/$ mkdir -p ab/cd/ef/gh/ij/kl
~/$ cdf kl
~/ab/cd/ef/gh/ij/kl ~/
~/$ pwd
~/ab/cd/ef/gh/ij/kl
kl$ popd # We're going back to our previous folder.
~/$ pwd
~/
Аналогичным псевдонимам для папок, содержащих частичный текст:
cdf() { pushd $(find . -name \*$1\*); }
Пример .bash_profile файл.