Тем кто пользовался терминалом в Linux знает, что часто приходится пользоваться командой cd
, для перехода в нужный каталог. Для ускорения переходов можно создавать ссылки ln -s
. Но есть еще один способ. который не увеличивает число файлов в вашем домашнем каталоге - autojump.
Что позволяет данная утилита?
Она запоминает каталоги которые фигурировали в команде cd (сохраняет их в собственной базе). И потом позволяет в них вернуться командой j имя_каталога
или j часть_имени_каталога
. Например:
вы перешли в каталог cd /home/user/project/ansible1
, поработали в нем, потом перешли в каталог cd /home/user/tmp/trash
, потом еще были цепочки переходов. Теперь же что бы вернуться в каталог /home/user/project/ansible1, не нужно доставать его из истории history
. Достаточно ввести команду j ans
и утилита сама выудит из истории список пройденных каталогов и сделает cd в него.
утилита позволяет уточнить в какой каталог именно нужно перейти, т.е. не обязательно вводить только одно слово. Если есть два каталога /home/user/project/ansible1 и /home/user/tmp/ansible1, то можно уточнить, куда именно перейти командой j pro ans
.
Так же утилита запоминает, какие каталоги чаще всего используются (утилита ведет учет весов каталогов) и при совпадении названий каталогов (но при их разном расположении) переход осуществится в тот, у которого вес больше - т.е который чаще использовался.
Повлиять на вес текущей директории можно командой: j -i 10
повысить вес или j -d 10
понизить вес текущей директории. Это может быть полезно, если ранее часто используемый каталог уже не должен так часто использоваться или наоборот.
Список известных утилите каталогов можно получить командой j --stat
.
Дополнительную информацию можно получить командой j --help
или из репозитория утилиты (https://github.com/bayrepo/autojump)
Хотелось бы описать еще пару дополнительных свойств данной утилиты.
Допустим в списке ранее посещаемых путей есть каталоги с русскими буквами, например /home/user/Рабочий стол
и вам часто нужно переходить в такие каталоги, то можно воспользоваться возможностью транслитерации утилиты на указанный язык. Пример, я хочу перейти в какталог "Рабочий стол", но не хочу переключать раскладку клавиатуры при наборе команды, то мне нужно набрать:
j -ru Ra
Ra в данном случае преобразуется в русские "Ра" и будет найден каталог "Рабочий стол".
Если нужно часть фразы транслитерировать, то то, что не должно преобразовываться в другой алфавит должно быть обрамлено знаками +.
Примеры, как будет транслитерирован результат:
+dir = dir
+dir+kut = dirкут
dir+kut+dir+kut=дирkutдирkut
Словарь для преобразования можно найти по пути: ~/.autojump/share/autojump/translator_ru
Имя словаря translator_xx, где вместо xx - это код языка. Который может быть любой и указывается в команде j -ru
, j -en
, j -bl
в данных примерах утилита будет искать такие словари: ~/.autojump/share/autojump/translator_ru
, ~/.autojump/share/autojump/translator_en
, ~/.autojump/share/autojump/translator_bl
Такой словарь можно составить самостоятельно.
Есть еще одна утилита для удобства в работе с autojump. Она расположена в каталоге nopythontools/autojumpadder.rb
. Когда autojump только устанавливается, то его список каталогов пуст. Он может сформироваться на основе истории команд, но история не всегда оказывается полной. Можно список каталогов для autojump создать с помощью данной утилиты (требуется установленный ruby).
С помощью данной утилиты есть возможность обойти все каталоги в указанном каталоге и добавить их в autojump
Usage: [ruby] autojumpadder.rb [options] absolute_path_to_folder_to_add_to_autojump
Options:
-h or --help - this help
-d or --dry or --dry-run - show only directories without adding to autojump
-n or --new-only - add only new directories
-m - max directory scan depth, 0 - unlimited
-e or --exclude - exclude dirs: -e dir1,dir2,dir3
-f or --file-exclude - file of exludes dir list in format:
dir1 - can be one word or absolute path
dir2
...
-v - verbose
-p - show progress bar
Примеры вызовов:
- Добавление всех подкаталогов домашнего каталога:
ruby autojumpadder.rb /home/alexey
-
Но в предыдущей команде нужно быть аккуратным, если подкаталогов много, то команда будет выполняться долго и база autojump станет черезчур большой. Есть выход - ограничение глубины просмотра поддиректорий:
ruby autojumpadder.rb -m 3 /home/alexey
т.е. просматривать не глубже 3-ей поддиректории
-
Есть еще дополнительные фильтры - по наличию строки в каталоге, исключить все, что перечисленно в списке
ruby autojumpadder.rb -m 3 /home/alexey -e go,bin,qt,windows,rpmbuild,radare2,fcdtdebugger,sources,kernelcare,___
команда выше исключит все, что содержит в себе go,bin,qt и т.н. например такой каталог как /home/alexey/go или /home/alexey/helogo
-
Список исключаемых слов и каталогов можно положить в файл
ruby autojumpadder.rb /home/alexey -f exclude_dirs.lst
-
Если ранее уже запускалась утилита по добавлению каталогов, но уже появились новые, то можно запустить добавление только новых каталогов:
ruby autojumpadder.rb -n /home/alexey
это параметр -n, он скажет программе вначале получить список того, что есть, а потом вычислить, что есть новое и добавить
-
Если не доверяете тому списку каталогов, который создаст утилита, то можно ее запустить в режиме dry-run, т.е. список каталогов будет составлен, но программа просто выведет, какими командами и какие каталоги будут добавлены в базу, без самого действия добавления
ruby autojumpadder.rb -m 3 -d -n /home/alexey -e go,bin,qt,windows,rpmbuild,radare2,fcdtdebugger,sources,kernelcare,___ -v
Новый параметр -d и вывод:
[alexey@localhost tests]$ ruby autojumpadder.rb -m 3 -d -n /home/alexey -e go,bin,qt,windows,rpmbuild,radare2,fcdtdebugger,sources,kernelcare,___ Will be added directory /home/alexey/tmphome/sodovaya with command /home/alexey/.autojump/bin/autojump --stat