Мы знаем, что использование cd <directory>
откроет каталог, если он существует!
Кроме того, cd ..
поднимет нас на один уровень от текущего рабочего каталога.
Но, когда у нас есть вложенный каталог с более длинным путем, как /home/thina/teams/td/tech/app/release/apks
, утомительно просто заходить в папку apks
, а также трудно вернуться к другому узлу, скажем здесь /home/thina/teams
.
Есть ли способ пропустить ввод cd
и cd ..
? Я использую Ubuntu 16.04.
В дополнение к очень хорошим ответам уже, если, вот некоторые подсказки относительно использования cd
эффективно.
cd -
заберет Вас к последнему каталогу, в котором Вы были.cd ../../..
возьмет Вас 3 уровня сразу, можно использовать ..
нотация объединила в цепочку вместе для 'перемещения вверх' стольких каталогов, сколько Вам нравится.cd ..
, затем используйте историю удара путем нажатия на клавише со стрелкой для использования команды снова.~
помогать для текущего пользовательского корневого каталога, если Вы зарегистрированы как пользователь ваш, cd ~/teams
, возьмет Вас к /home/thina/teams
cd
команда при вводе части сегмента контура, сопровождаемого Вкладкой, тот сегмент, будет завершена, если не будет никакого другого допустимого выбора. Например, если Вы ввели cd /home/thina/teams/td/t
затем нажал Tab, технология слова будет заполнена в для Вас, пока не было никаких других файлов или каталогов в td каталоге, который запустился с буквы T.Используя эти подсказки вместе может сделать пересекающие каталоги с cd
намного менее болезненный.
Существует 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
удар встроенные команды.
Для восстановления работоспособности в дереве нескольких уровней за один раз можно использовать следующую функцию (благодаря 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 -
поведение. Для долгих имен каталогов используйте переменные с полным путем. Например,
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
Вот пример использования:
$> pwd
/sys/class/backlight/intel_backlight
$> goup 3
$> pwd
/sys
$>
Другая небольшая функция, которую я придумал, но никогда не использовал в качестве многого, bookmark
функция.
Вот то, как это работает: это сохраняет Вашу текущую папку в некоторый файл, и затем Вы можете CD к определенному каталогу на основе номера строки в том файле. Пример:
$> cd /etc/lightdm
$> bookmark
$> cat ~/.dirsbookmarks
/home/xieerqi
/sys/class/backlight
/etc/lightdm
$> cd $( awk 'NR==2' ~/.dirsbookmarks )
$> pwd
/sys/class/backlight
И вот сама функция:
bookmark()
{ # bookmarks current dir
pwd >> $HOME/.dirsbookmarks
}
ОБНОВЛЕНИЕ: существует еще более мощный инструмент, чем autojump
: fasd
, но я не знаком с ним.
Я удивлен, что никто не упомянул autojump
все же, который
работы путем поддержания базы данных каталогов, Вы используете большинство из командной строки (Каталоги нужно посетить сначала, прежде чем они смогут перейтись к.)
Это в основном, что @graipher создал с несколькими дополнительными опциями.
Поскольку я упомянул по другому вопросу:
После Вас CD несколько раз к каталогу (даже однажды достаточен):
cd /home/thina/teams/td/tech/app/release/apks
можно использовать ярлык j
для перемещения туда быстро, независимо от которого каталога Вы в настоящее время находитесь в:
j apks
Обратите внимание, что с помощью любой части работ пути, пока это является самым высоким в списке: j app
также возьмет Вас к .../apks
если Вы пошли туда больше раз, чем к .../app
.
Я рекомендовал бы это вместо того, чтобы иметь Ваш собственный сценарий, так как это хорошо сохраняется, распределяется для Ubuntu и имеет другие аккуратные функции, такие как переход ребенку:
.../td/tech $ jc apk
.../release/apks $
Переместил Вас в apks
в td
, вместо некоторого другого apks
под другим деревом.
Включите autocd
опция (shopt -s autocd
), так, чтобы Вы не вводили cd
. Например, Вам просто нужна команда с двумя символами ..
перейти к родительскому каталогу.
Если Вы перешли между двумя каталогами, можно переключиться между ними с cd -
, который переходит к предыдущему рабочему каталогу. autocd
опция не делает -
выполненный cd -
но можно определить псевдоним или функцию для этого.
Можно запомнить каталоги на стеке с builtins pushd
и popd
. Встроенное dirs
перечисляет стопку каталога (я нахожу dirs -v
более читаемый).
Если Вы часто изменяетесь на подкаталоги конкретного каталога, и эти подкаталоги имеют довольно уникальное имя, добавьте их к CDPATH
переменная. Однако предупредите, что я никогда не находил ситуацию где CDPATH
было на самом деле удобно.
Можно установить переменную на имя каталога и затем измениться на него с $foo
.
Zsh имеет несколько хороших функций, которые не имеет удар. Некоторые из них могут быть эмулированы путем записи функций, которые делают то же задание. В особенности форма с двумя аргументами cd
позволяет Вам удобно измениться на другой каталог с аналогичным именем, например, от /home/thina/teams/td/tech/app/release/apks/com.acme/v1
, выполнение cd release beta
переходит в /home/thina/teams/td/tech/app/beta/apks/com.acme/v1
.
у меня есть список часто используемых каталогов, непосредственно доступных через псевдоним. Это также включает ярлыки для каталогов иерархия.
alias ..='cd ..'
alias ...='cd ../..'
alias ....='cd ../../..'
alias .....='cd ../../../..'
alias cdwork=/home/knub/Repositories/work
alias cduni=/home/knub/University
Теперь, то, когда я хочу пойти три, выравнивает, я просто тип ....<Enter>
, и там я!
lsmod
команда покажет Вам в настоящее время загруженные модули. Просто загружая модуль won' t помогают если ядро can' t определяют, что модуль должен быть загружен, все же. Ошибки, которые Вы утверждаете, что получили, предложили бы более глубокую проблему. Снова, не что-то, что может действительно быть решено в комментариях здесь.
– dobey
14 November 2017 в 12:57
Как я уже ответил на , имел отношение вопрос на 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, когда применимо.
у рыбы есть несколько хороших средств для того, чтобы быстро переместиться.
кроме того, я сохраняю свои любимые каталоги symlinked к ~/f, таким образом, я могу CD ~/f/x для получения до ~/foo/bar/baz/experimental-data.
-y
вообще.. но например, после выполнения sudo apt upgrade --dry-run
it' s, вероятно, раздражающий для прохода через него снова
– derHugo
14 November 2017 в 07:09
Команды 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***
псевдонимы под рукой для вещей как Desktop
, Documents
, Music
, Downloads
, и т.д. и это очень удобно!
Еще три опции, которые я нахожу для работы хорошо (хотя я май в будущем использовании pushd
больше, я только что узнал о том):
Расположите свои пути, таким образом, Вы не должны cd
в глубоко вложенные каталоги во-первых, или скорее: таким образом, местоположения, которые необходимо посетить часто, являются правильными под рукой. Способ достигнуть этого с символьными ссылками: сохраните явные, хорошо иерархически упорядоченные каталоги, как они, но делают быстрый канал доступа для Вашего собственного удобства.
ln -s ~/teams/td/tech/app/release/apks ~/apks
Затем вместо того, чтобы ввести длинный тракт к cd
, просто используйте cd ~/apks
, и cd ../teams
(или, в том предпочтительном примере, ~/teams
) возвращаться.
Не используйте единственную оболочку и CD назад и вперед между путями, но поддерживайте одну оболочку в рабочем состоянии для каждого из путей, в которых необходимо работать. Существует несколько уровней, на которых можно достигнуть этой многозадачности:
tmux
.Просто запустите действие в специализированной команде это cd
s вниз в папку, делает одну вещь там и сразу отдает управление на исходной папке: вместо
$ 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
вообще, но просто выполните команду прямо из Вашего корневого каталога. Расширения фигурной скобки могут помочь много здесь: Вместо
$ 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}
Попробуйте z.lua - новая команда CD, которая помогает Вам перейти быстрее путем изучения привычек.
CD к каталогу содержит нечто:
z foo
CD к каталогу заканчивается нечто:
z foo$
используйте несколько аргументов:
Принятие следующей базы данных:
10 /home/user/work/inbox
30 /home/user/mail/inbox
"z in"
был бы CD в /home/user/mail/inbox
как более высокая взвешенная запись. Однако можно передать несколько аргументов z.lua для предпочтения другой записи. В вышеупомянутом примере, "z w in"
затем изменил бы каталог на /home/user/work/inbox
.
CD с интерактивным выбором:
Когда существует несколько найденных соответствий, с помощью z -i
отобразит список:
$ z -i soft
3: 0.25 /home/data/software
2: 3.75 /home/skywind/tmp/comma/software
1: 21 /home/skywind/software
> {CURSOR}
Затем можно ввести число и выбрать, куда пойти перед фактическим CD. например, вход 3 к CD к /home/data/software
. И если Вы просто нажмете ENTER и ничего не введете, то это просто выйдет и останется, где Вы были.
z.lua
также поддержки fzf
для интерактивного выбора или завершения аргумента:
быстро возвратитесь для порождения без ввода cd ../../..
:
Новая опция "-b"
может быстро вернуться к определенному родительскому каталогу в ударе вместо того, чтобы ввести "CD../../.." избыточно:
(Никакой аргумент): cd
в корень проекта проект базируется ближайший родительский каталог с .git
/.hg
/.svn
в нем.
(Один аргумент): cd
в самый близкий родительский запуск с ключевого слова, если не находят, переходят к родительскому, содержащему ключевое слово.
(Два аргумента): замените первое значение вторым (в текущем пути).
...
Давайте запустимся путем искажения z -b
кому: zb
:
# go all the way up to the project root (in this case, the one that has .git in it)
~/github/lorem/src/public$ zb
=> cd ~/github/lorem
# cd into to the first parent directory named g*
~/github/vimium/src/public$ zb g
=> cd ~/github
# substitute jekyll with ghost
~/github/jekyll/test$ zb jekyll ghost
=> cd ~/github/ghost/test
Желание это могло соответствовать Вашей потребности.
apt-get install
без -y
в сценарии это просто won' t отвечают.
– Philip Kirkbride
13 November 2017 в 21:10
У меня есть длительно используемые псевдонимы для каталогов, к которым часто получают доступ.
У меня также есть функция удара, вызванная ccb (короткий для, создают bat-файл CD - это произошло в DOS/окнах, где .bat сценарий оболочки, ccb.bat создаст другой .bat файл для перехода к текущему каталогу), который создает/добавляет псевдонимы (в .bash_aliases файле) к текущему каталогу.
например: $ ccb myfav создаст псевдоним к текущему каталогу с псевдонимом myfav в .bash_aliases файле и получит .bashrc файл, таким образом, псевдоним будет сразу доступен.
Я сейчас нашел новое решение. Это - функция удара
## USAGE : lj <your_dir>
### lj -- short for LongJump -- (kinda similar to a C function which would jump to an address outside of your current function)
function lj() {
pushd `find . -type d -name $1 -print | head -n 1`
}
$ lj deeply_nested_dir_name
это ни о чем не должно узнавать из предыдущего использования. Проблема, которую это не могло бы решить: если будет больше чем 1 каталог, названный "deeply_nested_dir_name" в дереве подкаталога, то это перейдет к 1-му из каталога, найденного находкой.
Кроме того, это решение не сможет к goto некоторое другое дерево каталогов.
между псевдонимами hardcoded и сгенерированными псевдонимами и этим новым lj () функция, большинство моих потребностей заботится о.
Вот является мой ccb () функцией удара для любого, кто хочет использовать его
function ccb() {
foo=$PWD
echo "" >> ~/.bash_aliases
echo "alias $1='pushd $foo > /dev/null'" >> ~/.bash_aliases
source ~/.bashrc
}
Сегодня днем я написал скрипт, чтобы упростить смену каталогов.
Когда вы вызываете cdd
и есть более одного подкаталога, вам нужно выбрать один:
На этом экране, если вы нажмете кнопку ОК эквивалентно:
cd Seven\ Mary\ Three
или:
cd "Seven Mary Three"
Когда вы вызываете cdd
и есть только один подкаталог, он автоматически меняется на него:
rick@alien:~/Music/Seven Mary Three$ cdd
rick@alien:~/Music/Seven Mary Three/American Standard$
Когда вы вызываете cdd
и подкаталогов нет выдается ошибка:
rick@alien:~/Music/Seven Mary Three/American Standard$ cdd
No subdirectories
rick@alien:~/Music/Seven Mary Three/American Standard$