Мы знаем, что использование cd <directory>
откроет каталог, если он существует!
Кроме того, cd ..
поднимет нас на один уровень от текущего рабочего каталога.
Но, когда у нас есть вложенный каталог с более длинным путем, как /home/thina/teams/td/tech/app/release/apks
, утомительно просто заходить в папку apks
, а также трудно вернуться к другому узлу, скажем здесь /home/thina/teams
.
Есть ли способ пропустить ввод cd
и cd ..
? Я использую Ubuntu 16.04.
Существует pushd
и popd
:
pushd /home/thina/teams/td/tech/app/release/apks
# current directory now /home/thina/teams/td/tech/app/release/apks
popd
# current directory now what it was before pushd command
Попытка help pushd
и help popd
для большего количества опций. Нет никакого man
страница, потому что pushd
и popd
удар встроенные команды.
В дополнение к очень хорошим ответам уже, если, вот некоторые подсказки относительно использования cd
эффективно.
cd -
заберет Вас к последнему каталогу, в котором Вы были. cd ../../..
возьмет Вас 3 уровня сразу, можно использовать ..
нотация, объединенная в цепочку вместе для 'перемещения вверх' стольких каталогов, сколько Вам нравится. cd ..
, затем используйте историю удара путем нажатия на клавише со стрелкой для использования команды снова. ~
для помогания для текущего пользовательского корневого каталога если Вы зарегистрированы, поскольку пользователь ваш, cd ~/teams
, возьмет Вас к /home/thina/teams
cd
команда при вводе части сегмента контура, сопровождаемого Вкладкой тот сегмент будет завершен, если не будет никакого другого допустимого выбора. Например, если бы Вы ввели cd /home/thina/teams/td/t
, затем нажал Вкладку , технология слова была бы заполнена в для Вас, пока не было никаких других файлов или каталогов в td каталоге, который запустился с буквы T. Используя эти подсказки вместе может сделать пересекающие каталоги с [1 110] намного менее болезненными.
~
, особенно если Вы - корень, ~user
, быстро получит Вас к user
' s корневой каталог.
– MKOT
28.06.2016, 03:33
Для восстановления работоспособности в дереве нескольких уровней за один раз можно использовать следующую функцию (благодаря muru для расширенной версии):
up ()
{
local old="$PWD"
for i in $(seq "${1:-1}"); do
cd ..
done
OLDPWD="$old"
}
Затем можно сделать:
$ pwd
/home/thina/teams/td/tech/app/release/apks
$ up 5
cd'ing into /home/thina/teams
Дополнительно:
up
без аргумента эквивалентен cd ..
из-за ${1:-1}
, который занимает место $1
, когда установлено и 1
иначе cd ..
стремится сохранять обычное cd -
поведение. -gt
вместо >
. >
является лексикографическим, это выдерживает сравнение как строки. Кроме того, вместо того, чтобы создать путь, почему бы не cd ..
в цикле: for i in $(seq "${1:-1}"); cd ..; done
? Это может устранить if
условие также.
– alex067
28.06.2016, 04:36
gt
комментарий, но относительно Вашего второго предложения, видят заключительный маркер в ответе. Имеет смысл мне.
– Devin C.
28.06.2016, 09:10
OLDPWD
на первоначальный тракт. Here' s полная версия: paste.ubuntu.com/17990874
– JiaHao
28.06.2016, 09:14
Для долгих имен каталогов используйте переменные с полным путем. Например,
APKS="/home/thina/teams/td/tech/app/release/apks"
Затем можно сделать всего cd "$APKS"
Что касается восстановления работоспособности x количество каталогов, у меня есть эта функция, определяемая в моем .bashrc
goup() # go up x number of dirs
{
num=$1
while [ $num -ne 0 ];do
cd ..
num=$( expr $num - 1 )
done
}
Для возврата к /home/thina/teams
от apks
, Вы сделали бы
goup 6
, Вот пример использования:
[113]gt; pwd
/sys/class/backlight/intel_backlight
[113]gt; goup 3
[113]gt; pwd
/sys
[113]gt;
Другая небольшая функция, которую я придумал, но никогда не использовал в качестве многого, bookmark
функция.
Вот то, как это работает: это сохраняет Вашу текущую папку в некоторый файл, и затем Вы можете CD к определенному каталогу на основе номера строки в том файле. Пример:
[114]gt; cd /etc/lightdm
[114]gt; bookmark
[114]gt; cat ~/.dirsbookmarks
/home/xieerqi
/sys/class/backlight
/etc/lightdm
[114]gt; cd $( awk 'NR==2' ~/.dirsbookmarks )
[114]gt; pwd
/sys/class/backlight
И вот сама функция:
bookmark()
{ # bookmarks current dir
pwd >> $HOME/.dirsbookmarks
}
Включите autocd
опция (shopt -s autocd
), так, чтобы Вы не имели к типу cd
. Например, Вам просто нужна команда ..
с двумя символами для движения в родительский каталог.
, Если Вы перешли между двумя каталогами, можно переключиться между ними с cd -
, который переходит к предыдущему рабочему каталогу. autocd
опция не заставляет -
работать cd -
, но можно определить псевдоним или функцию для этого.
можно запомнить каталоги на стеке с builtins pushd
и popd
. Встроенное dirs
списки стопка каталога (я нахожу dirs -v
более читаемый).
, Если Вы часто изменяетесь на подкаталоги конкретного каталога и эти подкаталоги, имеют довольно уникальное имя, добавьте их к CDPATH
переменная. Однако предупредите, что я никогда не находил ситуацию, где CDPATH
было на самом деле удобно.
можно установить переменную на имя каталога и затем измениться на него с [1 114].
Zsh имеет несколько хороших функций, которые не имеет удар. Некоторые из них могут быть эмулированы путем записи функций, которые делают то же задание. В особенности форма с двумя аргументами [1 115] позволяет, Вы удобно измениться на другой каталог с аналогичным именем, например, от [1 116], работая
cd release beta
переходите в [1 118].
ОБНОВЛЕНИЕ: существует еще более мощный инструмент, чем autojump
: fasd
, но я не знаком с ним.
я удивлен, что никто еще не упомянул autojump
, который
работы путем поддержания базы данных каталогов Вы используете большинство из командной строки (Каталоги нужно посетить сначала, прежде чем они смогут перейтись к.)
Это в основном, что @graipher создал с несколькими дополнительными опциями.
, Как я имею , упомянул по другому вопросу:
После Вас CD несколько раз к каталогу (даже однажды достаточен):
cd /home/thina/teams/td/tech/app/release/apks
можно использовать ярлык j
для перемещения туда быстро, независимо от которого каталога Вы в настоящее время находитесь в:
j apks
Примечание, что использование любой части работ пути, пока это является самым высоким в списке: j app
также возьмет Вас к .../apks
, если Вы пошли туда больше раз, чем к .../app
.
я рекомендовал бы это вместо того, чтобы иметь Ваш собственный сценарий, так как это хорошо сохраняется, распределяется для Ubuntu и имеет другие аккуратные функции, такой как [1 131] переход ребенку :
.../td/tech $ jc apk
.../release/apks $
переместил Вас в [1 110] в [1 111], а не некоторый другой apks
под другим деревом.
команды pushd
и popd
являются моим избранным. Эти pushd
команда будет помнить каталоги, которые Вы посетили, видимый с командой dirs
, и когда Вы готовы перейти, назад используют popd
для возврата.
Вот пример с помощью функций удара и псевдонимов:
sd ()
{
pushd "$1" > /dev/null
}
po ()
{
popd
}
alias d='dirs'
я постоянно использую соединение этих команд во множестве путей.
Другая опция для каталогов, к которым часто получают доступ, состоит в том, чтобы просто исказить cd
или pushd
команды. Так, с помощью примеров из сообщения:
alias cdapks='cd /home/thina/teams/td/tech/app/release/apks'
alias cdteams='cd /home/thina/teams'
Объединение у этих двух идей и Вас может даже быть это:
alias sdapks='sd /home/thina/teams/td/tech/app/release/apks'
alias sdteams='sd /home/thina/teams'
, Который затем дает Вам большую гибкость в пересекающих каталогах. Я сохраняю cd***
и sd***
псевдонимы под рукой для вещей как [1 112], Documents
, Music
, Downloads
, и т.д. и это очень удобно!
Как я уже ответил на , имел отношение вопрос на UnixSE, я использую сценарий, названный z [github] для этого.
Это помнит каталоги Вы CD к, оценивает их согласно frecency (частота + новизна) и позволяет Вам изменяться на один из помнивших путей с помощью некоторой части ее имени.
После наличия cd'ed к каталогу, по крайней мере, после того как можно сделать, например, вместо:
$ cd ~user/very/long/path/with/many/subfolders/
Просто сделайте:
$ z sub
, который будет работать, с помощью частичного имени, соответствующего (принятие Вас не имеют никакого другого каталога, содержащего в его пути термин sub и который имеет более высокий frecency).
я также определил функцию как это, который первые попытки нормальный CD и если это приводит использование к сбою z:
function cd() {
builtin cd "$1" 2> /dev/null || z "$1" || (echo "cd: File or Directory not found: $1" >&2 && exit 1)
}
Это дает Вам лучшего из обоих. Если папка будет в текущем каталоге, или допустимый полный путь дан, то это будет просто CD там, но если не это попытается найти соответствие в базе данных и CD там. Это устраняет (маленькую) боль иногда необходимости использовать CD (для обучения базы данных, движения к папке, к которой Вы никогда не были прежде), и иногда не забывающий использовать z, когда применимо.
cd
ваш doesn' t interfer с тем, как z
создает базу данных часто посещаемых каталогов?
– Amit Desale
28.06.2016, 07:41
у меня есть список часто используемых каталогов, непосредственно доступных через псевдоним. Это также включает ярлыки для каталогов иерархия.
alias ..='cd ..'
alias ...='cd ../..'
alias ....='cd ../../..'
alias .....='cd ../../../..'
alias cdwork=/home/knub/Repositories/work
alias cduni=/home/knub/University
Теперь, то, когда я хочу пойти три, выравнивает, я просто тип ....<Enter>
, и там я!
Еще три опции, которые я нахожу для работы хорошо (хотя я май в будущем использовании pushd
[еще 1115], я только что узнал о том):
Расположение Ваши пути, таким образом, Вам не нужно к cd
в глубоко вложенные каталоги во-первых, или скорее: таким образом, местоположения, которые необходимо посетить часто, являются правильными под рукой. Способ достигнуть этого с [1 117] символьные ссылки : сохраните явные, хорошо иерархически упорядоченные каталоги, как они, но делают быстрый канал доступа для Вашего собственного удобства.
ln -s ~/teams/td/tech/app/release/apks ~/apks
Затем вместо того, чтобы ввести длинный тракт к cd
, просто использование cd ~/apks
, и cd ../teams
(или, в том предпочтительном примере, ~/teams
) для возвращения.
не используют единственную оболочку и CD назад и вперед между путями, но поддерживают одну оболочку в рабочем состоянии для каждого из путей, в которых необходимо работать. Существует несколько уровней, на которых можно достигнуть этой многозадачности:
Просто запускают действие в специализированной команде, что cd
с вниз в папку, делает одну вещь там и сразу отдает управление на исходной папке: вместо [1 131]
$ cd /home/thina/teams/td/tech/app/release/apks
$ some_command this_file_here
$ cd ../../../../..
просто делают острота
$ (cd ~/teams/td/tech/app/release/apks; some_command this_file_here)
или эквивалентно
$ sh -c 'cd ~/teams/td/tech/app/release/apks
> some_command this_file_here'
не Делает cd
во всем , но просто выполняет команду прямо из Вашего корневого каталога. расширения Фигурной скобки могут помочь много здесь: Вместо [1 134]
$ cd /home/thina/teams/td/tech/app/release/apks
$ some_command this_file_here other_file_also_apks
$ cd ../../../../..
можно сделать
$ some_command ~/teams/td/tech/app/release/apks/{this_file_here,other_file_also_apks}
pushd
очень очень полезно. Можно хотеть включить больше информации, как использовать ее для создания ответа лучше.
– Zoe
28.06.2016, 09:29
у рыбы есть несколько хороших средств для того, чтобы быстро переместиться.
кроме того, я сохраняю свои любимые каталоги symlinked к ~/f, таким образом, я могу CD ~/f/x для получения до ~/foo/bar/baz/experimental-data.
cd -
делает то же самое? – barbsan 28.06.2016, 00:13pushd
иpopd
может помнить больше чем один предыдущий путь. – jayko03 28.06.2016, 00:15dirs
для списка стопки каталога вpushd
/popd
команды. – DrunkCoder 28.06.2016, 01:02help pushd
, иhelp popd
Вы упомянули (а такжеhelp dirs
), но я думал I' d упоминают что в случае, если люди задавались вопросом, куда эти команды прибывают из. – devyJava 28.06.2016, 02:12help pusdh
– DrunkCoder 28.06.2016, 09:37