Известно, что для навигации по директориям файловой системы в Linux используется команда cd:
$ cd Directory/
Если же директория запрятана далеко, то неизбежно придётся набирать команду:
$ cd /path/to/deeply/hidden/directory/subdirectory/destination
Чтобы добраться до destination
даже с учётом дополнения по TAB,
придётся потрудиться.
Как это сделать проще?
Здесь мы рассмотрим три способа ускорения навигации в консоли по файловой системе.
Алиасы
Во-первых, для часто посещаемых директорий можно создать алиасы.
Например, пропишем в ~/.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Однако для меня достаточно лишь быстрого хождения по директориям.
Программа CDargs
Эта программа предоставляет меньшую функциональность, нежели 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.
Установка CDargs
В 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.
Копируете статью - поставьте ссылку на оригинал!
Комментариев нет:
Отправить комментарий