переход в родительский каталог в unix

В общем мы используем

cd .. для перехода в родительский каталог

cd ../../ перейти в родительский каталог parents. и

cd ../../../../../ для 5-го родительского каталога.

есть ли упрощенный способ это сделать?

оболочка, которую я использую, - это ksh.

9 ответов


эта функция для Bash, но что-то подобное может быть сделано для других (это может работать как-есть в ksh и zsh):

cdn () { pushd .; for ((i=1; i<=; i++)); do cd ..; done; pwd; }

пример использования:

/some/dirs/and/subdirs$ cdn 3
/some/dirs/and/subdirs /some/dirs/and/subdirs
/some
/some$ popd
/some/dirs/and/subdirs$

вот функция, которая будет cd в именованный подкаталог над текущим рабочим каталогом:

cdu () { cd "${PWD%//*}/"; }

пример использования:

/usr/share/atom/resources/app/apm/src/generator$ cdu apm
/usr/share/atom/resources/app/apm$ cdu resources
/usr/share/atom/resources$ cd -
/usr/share/atom/resources/app/apm$ cdu share
/usr/share

вы должны быть осторожны, если вы устанавливаете любые псевдонимы, как это. Вы не всегда будете подниматься на 5 каталогов, когда вы cd ../../../../... Если вы только 2 или 3 каталога вниз от / вы окажетесь в /. Попробуйте сами.

$ cd ~
$ pwd
/home/you
$ cd ../../../..
$ pwd
/

это происходит потому, что родительский каталог / фактически /.


и я думал, что я ленивый...

давным-давно я устал печатать cd .. Итак, примерно с 1988 года одним из моих стандартных псевдонимов (и пакетных файлов для MSDOS/Windows) является up. Возможно, мне следует расширить понятие:

alias up='cd ..'
alias up2='cd ../..'
alias up3='cd ../../..'
alias up4='cd ../../../..'
alias up5='cd ../../../../..'
alias up6='cd ../../../../../..'

вы можете проверить новый проект bd

если вы находитесь на этом пути

/home/user/project/src/org/main/site/utils/file/reader/whatever 

и вы хотите поехать в site каталог быстро (вместо ввода cd ../../../..),
затем просто введите:

bd site

Если вам не нравится печатать или запоминать имена файлов, вы можете перемещаться по каталогам с чем-то вроде NerdTree?


вы можете определить псевдонимы, чтобы упростить этот вид cd операции.

обратите внимание, что было бы легко сделать ошибки с псевдонимом в терминах ../../../.. etc, потому что вы должны быть очень уверен в отношениях между вашим текущим каталогом и тем, где вы хотели быть.

лучше использовать абсолютные пути с alias


использовать cd / перейти к корневой файловой системе и cd ~ перейти к вам домой каталог.
Пример: чтобы зайти к вам лог-директор просто сделайте cd /var/log.


для оболочек типа Борна (включая ksh), вы можете написать функцию оболочки:

cdup() {
    set -- "${1-1}"
    while test "" -gt 0; do
      cd ..
      set -- "$((-1))"
    done
}

это, как правило, как я это делаю. Конечно, в ksh вы можете настроить навигационные клавиши на что-то другое. Когда я использовал ksh, я использовал их в VI стиле, чтобы это было k вместо стрелки вверх.

в сценариях оболочки лучше быть явным. Если вы можете использовать абсолютный путь, сделайте это и выполните команду:

cd /webdata/cgi-bin

если скрипт может быть запущен для работы с файлами в разных каталогах, то вы можете рассмотреть что - то вроде это:

TOPDIR="/webdata"
cd $TOPDIR/cgi-bin

но если вы действительно не можете сделать ни то, ни другое, тогда придерживайтесь .. цепи такие:

chmod +x *.py
cd ../../../cgi-bin

это совершенно ясно. Выполните действие в текущем рабочем каталоге, затем перейдите на 3 уровня вверх и выберите каталог cgi-bin. Любой, кто способен понять, что вы делаете в сценарии оболочки, не должен иметь никаких трудностей в следовании этому. Если ваш скрипт действительно сложный, то он поможет добавить некоторые комментарии, такие как это:

# change to TOPDIR/cartsys/production/code/python
cd python    
chmod +x *.py
cd ../../../cgi-bin

подразумевается, что вы были в каталоге кода и изменили один уровень на python, поэтому читатель, который забыл, где вы были в иерархии каталогов, видит напоминание, чтобы помочь им подсчитать 3 уровня.

cd ..

<up arrow><ENTER>
<up arrow><ENTER>
<up arrow><ENTER>
<up arrow><ENTER>