Известно, что для навигации по директориям файловой системы в Linux
используется команда cd:
Здесь мы рассмотрим три способа ускорения навигации в консоли по
файловой системе.
Алиасы
Во-первых, для часто посещаемых директорий можно создать алиасы.
Например, пропишем в ~/.bashrc (если используем оболочку bash):
if [ -f ~/.bash_aliases ]; then
. ~/.bash_aliases
fi
Теперь в файле ~/.bash_aliases будем записывать алиасы:
alias destination='cd /path/to/deeply/hidden/directory/subdirectory/destination'
После обновления оболочки (source ~/.bashrc или простого перезапуска
терминала) для того, чтобы пройти по предыдущему пути, в командной
строке будет достаточно набрать
$ destination
Более того, будет работать автодополнение (если оно установлено, конечно).
К преимуществам можно отнести простоту и удобство в виде
автодополнения. Недостаток же состоит в том, что кроме как перейти в
назначенную директорию, мы будем не в состоянии.
Например, пусть в директории destination есть поддиректория
subdirectory. Перейти в неё за одно действие описанным способом
нельзя. Команда destination/subdirectory не сработает, алиасы bash
этого не понимают. Алиасы в zsh поумнее, возможно, они с этим
справятся, но я не специалист в этом вопросе.
Программа WCD
WCD (Wherever Change Directory)
позволяет быстро менять директории. Программа кэширует дерево
каталогов, после чего для перехода в destination из любой точки
файловой системы достаточно скомандовать.
$ wcd destination
Здесь не будет работать автодополнение (по крайней мере у меня не
работает. Если кто завёл - отзовитесь :) Зато будут функционировать
wildcards * и ?. Более того, можно использовать неполное имя
директории. Например, сработают варианты:
$ wcd dest
$ wcd *tion
$ wcd dest??ation
Если под запрос попадает несколько вариантов, будет выведен
список, в котором можно будет выбрать нужный вариант (если вариантов
очень много, то выведется постраничный листинг, для навигации в
котором используются клавиши w и x):
a /usr/share/doc/texlive-latex-extra-doc/latex/datenumber
b /usr/share/doc/texlive-latex-extra-doc/latex/datetime
c /usr/share/icons/gnome/16x16/stock/data
d /usr/share/icons/gnome/24x24/stock/data
e /usr/share/icons/gnome/48x48/stock/data
f /usr/share/icons/hicolor/128x128/stock/data
g /usr/share/icons/hicolor/16x16/stock/data
h /usr/share/icons/hicolor/192x192/stock/data
i /usr/share/icons/hicolor/22x22/stock/data
j /usr/share/icons/hicolor/24x24/stock/data
k /usr/share/icons/hicolor/32x32/stock/data
l /usr/share/icons/hicolor/36x36/stock/data
m /usr/share/icons/hicolor/48x48/stock/data
n /usr/share/icons/hicolor/64x64/stock/data
o /usr/share/icons/hicolor/72x72/stock/data
p /usr/share/icons/hicolor/96x96/stock/data
q /usr/share/icons/hicolor/scalable/stock/data
r /usr/share/texmf-texlive/tex/latex/dateiliste
s /usr/share/texmf-texlive/tex/latex/datenumber
t /usr/share/texmf-texlive/tex/latex/datetime
u /usr/share/texmf-texlive/tex/latex/ucs/data
v /var/spool/openoffice/uno_packages/cache/registry/com.sun.star.comp.deploym
Wild match for 137 directories. w=up x=down ?=help Page 7/7
Please choose one (<Enter> to abort):
С применением wcd есть
возможность заходить в поддиректории назначения, но здесь уже не будет
работать автодополнение. То есть либо придётся по памяти набивать
поддиректорию, используя wildcard, либо, в случае малой вложенности
директорий, в качестве поддиректории сразу вколотить *
$ wcd destination/*
Установка WCD
В Debian пакет есть в репозиториях, поэтому просто:
$ sudo aptitude install wcd
После этого копируем бинарник программы куда-нибудь в $PATH (проверить
можно по echo $PATH). В моём случае это ~/bin.
$ cp /usr/lib/wcd/wcd.exec ~/bin
Дальше всё по мануалу (man wcd). Лезем в ~/.bashrc (или какая там
у вас оболочка?) и добавляем:
# WCD function
function wcd
{
$HOME/bin/wcd.exeс $*
. $HOME/bin/wcd.go
}
(Для csh будет alias wcd "$HOME/bin/wcd.exe \!* ; source $HOME/bin/wcd.go")
После этого перезапускаем оболочку и... ещё не радуемся. Надо же
просканировать необходимые директории. Вся домашняя директория
(пере)сканируется с использованием ключа -s, какой-то заданный путь - с
ключом -A (добавляется, а не перезаписывается):
$ wcd -s
$ wcd -A /media
Можно объединить
$ wcd -s -A /media/
Теперь можно пользоваться программой. У wcd
много дополнительных возможностей, например графический интерфейс,
который строит дерево каталогов:
$ wcd -ga
| | | |- 700
| | | |- mm4b -+- 550_105min
| | | | |- 550_30min
| | | | |- 625
| | | | `- 725
| | | `- old_MM4_PeaksCorrection -+- 350
| | | |- 400
| | | |- 450
| | | |- 500
| | | |- 550
| | | |- 600
| | | |- 625
| | | |-<650>
| | | |- 675
| | | `- 700
| | `- results
| |- old_perovskites -+- Membrane -+- air -+- dat
| | | | `- raw
| | | |- graphs -+- Air
| | | | `- Vacuum
| | | |- photo -+- 280307
| | | | `- 290307
| | | |- synchrotron -+- correct
| | | | `- uxd
| | | `- vacuum --- Vac_dat
Однако для меня достаточно лишь быстрого хождения по директориям.
Эта программа предоставляет меньшую функциональность, нежели
wcd, однако может оказаться более
удобной. По сути она позволяет формировать закладки в файловой
системе для быстрого доступа к ним.
$ cv bookmark
/path/to/buried/directory/with/bookmark
То есть, скомандовав перейти в bookmark из любой директории, мы прошли разом весь путь.
Какое же отличие от простых алиасов? Во-первых, есть возможность
заходить в поддиректории, более того, с использованием
автодополнения.
$ cv Music [TAB]
Music/Audiobooks/ Music/Foreign/ Music/Sounds/
Music/Classic/ Music/Fun/ Music/Soundtrack/
Music/Collections/ Music/Russian/
$ cv Music/Classic/ [TAB]
Music/Classic/Classic\ in\ rock/ Music/Classic/\М\у\с\о\р\г\с\к\и\й/
Music/Classic/PlanetClassic/ Music/Classic/\П\у\ч\ч\и\н\и/
Music/Classic/\В\и\в\а\л\ь\д\и/ Music/Classic/\Р\а\х\м\а\н\и\н\о\в/
Music/Classic/\Д\в\о\р\ж\а\к/ Music/Classic/\Р\о\с\с\и\н\и/
Music/Classic/\М\о\ц\а\р\т/ Music/Classic/\Ч\а\й\к\о\в\с\к\и\й/
Во-вторых, есть возможность быстрого копирования
файлов в точку ФС, куда указывает закладка.
$ cpb foo bookmark/subdirectory
Но тут, к сожалению, не работает дополнение по табу :(
В третьих есть псевдогуи, на ncurses.
В Debian Lenny, опять же, программа есть. Поэтому
$ sudo aptitude install cdargs
После этого можно запустить cdargs и почитать справку, нажав ?.
Можно добавить закладки через GUI, а можно просто отредактировать файл
~/.cdargs:
cac /home/maxim/Documents/conferences/cac
Documents /home/maxim/Documents
Music /home/maxim/Music
Video /home/maxim/Video
devel /home/maxim/devel
python-dev /home/maxim/devel/python
Incomplete /home/maxim/p2p/Incomplete
p2p /home/maxim/p2p
data /media/data/
Для bash в ~/.bashrc пишем:
# CDargs function
if [ -e /usr/share/doc/cdargs/examples/cdargs-bash.sh ]; then
. /usr/share/doc/cdargs/examples/cdargs-bash.sh
fi
function cv () {
cdargs "$1" && cd "‘cat "$HOME/.cdargsresult"‘" ;
}
Теперь, после перезапуска оболочки бегаем по файловой системе со
скоростью спринтера.
Резюме
Второй и третий методы более совершенны, нежели первый. У каждого
есть свои плюсы и минусы, поэтому лично я использую оба, тем более, что с
cdargs я познакомился совсем недавно.
Несомненно, программы wcd и cdargs существенно облегчат жизнь
обитателям консоли.
Напоследок хотелось бы отметить, что с cdargs я познакомился благодаря обзору на Debian Package of the Day.