Мы знаем, что использование cd <directory>
откроет каталог, если он существует!
Кроме того, cd ..
поднимет нас на один уровень от текущего рабочего каталога.
Но когда у нас есть вложенный /home/thina/teams/td/tech/app/release/apks
каталог с более длинным путем, например , утомительно просто заходить в папку, apks
а также трудно вернуться к другому узлу, скажем здесь /home/thina/teams
.
Есть ли способ пропустить ввод cd
и cd ..
? Я использую Ubuntu 16.04.
command-line
bash
directory
gsthina
источник
источник
cd
иcd ..
?cd ../../../../..
CDPATH
переменную вbash
документации.Ответы:
Есть
pushd
иpopd
:Попробуйте
help pushd
иhelp popd
для большего количества вариантов. Там нетman
страницы, потому чтоpushd
иpopd
bash встроенные команды.источник
cd -
сделал бы то же самое?pushd
иpopd
может запомнить более одного предыдущего пути.dirs
указать свой стек каталогов в командахpushd
/popd
.help pushd
иhelp popd
вы, и вы упомянули (но такжеhelp dirs
), но я подумал, что упомяну это, если люди будут интересоваться, откуда берутся эти команды.help pusdh
В дополнение к уже полученным очень хорошим ответам, вот несколько советов по
cd
эффективному использованию .cd -
вернет вас в последний каталог, в котором вы были.cd ../../..
Вы поднимитесь на 3 уровня одновременно, вы можете использовать..
нотацию, соединенную вместе, чтобы «продвинуться» на столько каталогов, сколько захотите.cd ..
, а затем используйте историю bash, нажав клавишу со стрелкой вверх, чтобы снова использовать команду.~
для доступа к домашнему каталогу текущих пользователей, если вы вошли в систему как пользователь thinacd ~/teams
, вы перейдете к/home/thina/teams
cd
команде, если после ввода части сегмента пути Tabэтот сегмент будет завершен, если другого допустимого выбора нет. Например, если вы набрали, аcd /home/thina/teams/td/t
затем нажали Tab, слово tech будет заполнено для вас, если в каталоге td нет других файлов или каталогов, начинающихся с буквы t.Совместное использование этих советов может сделать обходные каталоги
cd
гораздо менее болезненными.источник
~
, особенно если вы являетесь пользователем root,~user
быстро приведет вас вuser
домашний каталог.Чтобы подняться в дереве на несколько уровней одновременно, вы можете использовать следующую функцию (спасибо muru за улучшенную версию):
Тогда вы можете сделать:
Дополнительно:
up
без аргумента эквивалентен тому,cd ..
из-за${1:-1}
чего подставляется,$1
когда установлено, и в1
противном случаеcd ..
направлена на сохранение обычногоcd -
поведения.источник
-gt
вместо>
.>
является лексикографическим, сравнивается как строки. Кроме того, вместо построения пути, почему бы не сделатьcd ..
в циклеfor i in $(seq "${1:-1}"); cd ..; done
:? Это может устранитьif
условие тоже.gt
замечанием, но в отношении вашего второго предложения см. последний пункт в ответе. Имеет смысл для меня.OLDPWD
первоначальный путь. Вот полная версия: paste.ubuntu.com/17990874Для длинных имен каталогов используйте переменные с полным путем. Например,
Тогда вы можете сделать только
cd "$APKS"
Что касается увеличения количества каталогов на x, у меня есть эта функция, определенная в моем
.bashrc
Для возврата
/home/thina/teams
изapks
вас будет делатьВот пример использования:
Еще одна маленькая функция, которую я придумал, но никогда не использовал так много, это
bookmark
функция.Вот как это работает: он сохраняет вашу текущую папку в некоторый файл, а затем вы можете перейти в конкретный каталог на основе номера строки в этом файле. Пример:
А вот и сама функция:
источник
ОБНОВЛЕНИЕ: Есть еще более мощный инструмент, чем
autojump
:,fasd
но я не знаком с ним.Я удивлен, что никто еще не упомянул,
autojump
чтоЭто в основном то, что @graipher построил, с несколькими дополнительными опциями.
Как я уже говорил по другому вопросу:
После того, как вы перейдете в каталог несколько раз (достаточно даже одного):
cd /home/thina/teams/td/tech/app/release/apks
вы можете использовать ярлык
j
для быстрого перемещения туда, независимо от того, в каком каталоге вы сейчас находитесь:j apks
Обратите внимание, что использование любой части пути работает до тех пор, пока оно является самым высоким в списке: оно
j app
также приведет вас к тому,.../apks
что вы заходили туда чаще, чем к.../app
.Я бы порекомендовал его вместо собственного сценария, поскольку он хорошо поддерживается, распространяется для Ubuntu и имеет другие полезные функции, такие как переход к дочернему элементу :
Переехал вас
apks
вtd
, а не какой - то другойapks
под другим деревом.источник
Псевдонимы
У меня есть список часто используемых каталогов, доступных напрямую через псевдоним. Это также включает в себя ярлыки для каталогов вверх по иерархии.
Теперь, когда я хочу подняться на три уровня вверх, я просто набираю
....<Enter>
и вот я!источник
Включите
autocd
опцию (shopt -s autocd
), чтобы вам не приходилось печататьcd
. Например, вам просто нужна двухсимвольная команда..
для перехода в родительский каталог.Если вы перемещаетесь между двумя каталогами, вы можете переключаться между ними с помощью
cd -
, которая переходит к предыдущему рабочему каталогу.autocd
Вариант не делает-
бег ,cd -
но вы можете определить псевдоним или функцию для этого.Вы можете запомнить каталоги в стеке с помощью встроенных
pushd
иpopd
. Встроенныйdirs
список каталогов стек (я считаю,dirs -v
более читабельным).Если вы часто переключаетесь на подкаталоги определенного каталога, и эти подкаталоги имеют довольно уникальное имя, добавьте их в
CDPATH
переменную. Однако следует помнить, что я никогда не находил ситуацию, котораяCDPATH
была бы действительно удобной.Вы можете установить переменную на имя каталога, а затем изменить его с помощью
$foo
.У Zsh есть несколько приятных функций, которых нет у bash. Некоторые из них можно эмулировать, написав функции, которые выполняют ту же работу. В частности, форма с двумя аргументами
cd
позволяет вам удобно перейти в другой каталог с похожим именем, например, из которого/home/thina/teams/td/tech/app/release/apks/com.acme/v1
выполняетсяcd release beta
run/home/thina/teams/td/tech/app/beta/apks/com.acme/v1
.источник
Как я уже ответил на связанный вопрос по UnixSE, для этого я использую скрипт с именем z [github] .
Он запоминает каталоги, в которые вы переходите, ранжирует их по частоте (частота + время) и позволяет вам перейти к одному из запомненных путей, используя некоторую часть его имени.
После cd'ed в каталог хотя бы один раз вы можете сделать, например, вместо:
Просто сделать:
который будет работать, используя частичное сопоставление имен (при условии, что у вас нет другого каталога, содержащего в своем пути термин sub и который имеет более высокую частоту).
Я также определил функцию, подобную этой, которая сначала пробует обычный cd, а в случае неудачи использует z:
Это дает вам лучшее из обоих. Если папка находится в текущем каталоге или указан правильный полный путь, она просто перейдет туда cd, но если нет, то попытается найти совпадение в базе данных и скопировать туда. Это устраняет (небольшую) боль, связанную с тем, что иногда приходится использовать cd (для обучения базы данных, перехода в папку, в которой вы никогда раньше не были), а иногда и не забывать использовать z, когда это применимо.
источник
cd
не влияет наz
создание базы данных часто посещаемых каталогов?autojump
?Еще три варианта, которые я нахожу, чтобы работать хорошо (хотя я могу в будущем использовать
pushd
больше, я только что узнал об этом):Расположите свои пути так, чтобы вам не нужно было
cd
вначале вкладывать глубоко вложенные каталоги, а точнее: чтобы часто посещаемые вами места всегда были у вас под рукой. Для достижения этого можно использовать символические ссылки : сохраняйте явные, хорошо иерархизированные каталоги такими, какие они есть, но создавайте ссылки быстрого доступа для собственного удобства.Затем, вместо того, чтобы вводить длинный путь
cd
, просто используйтеcd ~/apks
иcd ../teams
(или, в этом примере предпочтительнее~/teams
) вернуться.Не используйте одну оболочку и cd туда и обратно между путями, но оставляйте одну оболочку работающей для каждого из путей, с которыми вам нужно работать. Существует несколько уровней, на которых можно достичь этой многозадачности:
tmux
.Просто запустите действие с помощью специальной команды, которая находится
cd
в папке, выполняет одно действие и немедленно возвращает управление исходной папке: вместопросто сделай однострочник
или эквивалентно
Не
cd
совсем , а просто выполнить право команды из вашей домашней директории. Расширения скобок могут очень помочь здесь: вместоты можешь сделать
источник
pushd
очень очень полезно Вы можете добавить больше информации о том, как использовать его, чтобы сделать ваш ответ лучше.Пуш и Попд
Команды
pushd
иpopd
мои любимые. Командаpushd
запомнит каталоги, которые вы посетили, которые можно просмотреть с помощью командыdirs
, и когда вы будете готовы перейти назад, используйтеpopd
для возврата.Вот пример использования функций и псевдонимов bash:
Я постоянно использую сочетание этих команд различными способами.
Псевдонимы
Другим вариантом для часто используемых каталогов является просто псевдоним команд
cd
илиpushd
. Итак, используя примеры из вашего поста:комбинирование
Объедините две идеи, и вы даже можете иметь это:
Что дает вам большую гибкость при обходе каталогов. Я держать
cd***
иsd***
псевдонимы под рукой для таких вещей , какDesktop
,Documents
,Music
,Downloads
и т.д. , и это очень удобно!источник
Попробуйте z.lua - новую команду cd, которая поможет вам быстрее ориентироваться, изучая свои привычки.
CD в каталог содержит foo:
cd в каталог заканчивается на foo:
использовать несколько аргументов:
Предполагая следующую базу данных:
"z in"
будет в/home/user/mail/inbox
качестве более взвешенного входа. Однако вы можете передать несколько аргументов z.lua, чтобы предпочесть другую запись. В приведенном выше примере,"z w in"
затем измените каталог на/home/user/work/inbox
.CD с интерактивным выбором:
Когда найдено несколько совпадений, при использовании
z -i
отобразится список:Затем вы можете ввести номер и выбрать, куда идти до фактического компакт-диска. например. введите 3 для CD
/home/data/software
. И если вы просто нажмете ENTER и ничего не введете, он просто выйдет и останется там, где вы были.z.lua
также поддерживаетfzf
интерактивный выбор или завершение аргумента:пополнение с фзф
быстро вернуться к родителю без ввода
cd ../../..
:Новая опция
"-b"
может быстро вернуться к определенному родительскому каталогу в bash вместо того, чтобы набирать «cd ../../ ..» излишне:(Без аргумента) :
cd
в корне проекта, корень проекта - ближайший родительский каталог с.git
/.hg
/.svn
в нем.(Один аргумент) :
cd
в ближайший родительский элемент, начиная с ключевого слова, если не найти, перейдите к родительскому элементу, содержащему ключевое слово.(Два аргумента) : заменить первое значение вторым (в текущем пути).
...
Давайте начнем альясинг
z -b
кzb
:Жаль, что это может соответствовать вашим потребностям.
источник
рыба имеет несколько хороших возможностей для быстрого перемещения.
Кроме того, я держу мои любимые каталоги по символическим ссылкам в ~ / f, поэтому я могу cd ~ / f / x, чтобы добраться до ~ / foo / bar / baz / экспериментальные данные.
источник
Я давно использовал псевдонимы для часто используемых каталогов.
У меня также есть функция bash ccb (сокращение от create cd bat file - она возникла в dos / windows, где сценарий оболочки .bat ccb.bat создаст другой файл .bat для перехода в текущий каталог), который создает / добавляет псевдонимы (в файле .bash_aliases) в текущий каталог.
Например: $ ccb myfav создаст псевдоним для текущего каталога с псевдонимом myfav в файле .bash_aliases и создаст исходный файл .bashrc, чтобы псевдоним был немедленно доступен.
Я только сейчас нашел новое решение. Это функция bash
этому не нужно учиться чему-либо из предыдущего использования. Проблема, которую это может не решить: если в дереве подкаталогов более 1 каталогов с именем «deeply_nested_dir_name», он перейдет к 1-му каталогу, найденному функцией find.
Кроме того, это решение не сможет перейти в другое дерево каталогов.
между жестко закодированными псевдонимами и сгенерированными псевдонимами и этой новой функцией lj (), большинство моих потребностей удовлетворены.
Вот моя функция ccb () bash для тех, кто хочет ее использовать
источник