Подтвердить что ты не робот

Поднимитесь на несколько каталогов в Linux

Когда я хочу перейти в один каталог, я использую

cd ..

Но когда я хочу пойти 7 каталогов, есть ли способ сделать это иначе, чем просто ввести семь (7) раз cd ..?

4b9b3361

Ответ 1

cd ../../../../../../../

Еще один полезный совет для навигации - если вы, например, говорите, что продолжаете переходить из каталога (называть его A) другим (назовите его B), что в вашем случае 7 каталогов.

Итак, если вы находитесь в каталоге A:

A> cd ../../../../../../../
B> // Now you're in directory B and want to go back to A
B> cd -

Это переместится обратно в каталог A. - будет расширяться до предыдущего каталога, в котором вы были.

Ответ 2

Сделайте псевдоним (у вас ~/.bashrc)

function cd_up() {
  cd $(printf "%0.0s../" $(seq 1 $1));
}
alias 'cd..'='cd_up'

и используйте:

$ cd.. 7

UPD: Или сделайте более мощный вариант, cd to dir name в текущем пути:

# cd up to n dirs
# using:  cd.. 10   cd.. dir
function cd_up() {
  case $1 in
    *[!0-9]*)                                          # if no a number
      cd $( pwd | sed -r "s|(.*/$1[^/]*/).*|\1|" )     # search dir_name in current path, if found - cd to it
      ;;                                               # if not found - not cd
    *)
      cd $(printf "%0.0s../" $(seq 1 $1));             # cd ../../../../  (N dirs)
    ;;
  esac
}
alias 'cd..'='cd_up'                                # can not name function 'cd..'

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

$ cd /home/user/documents/projects/reports/2014-10-01
$ cd.. doc
$ pwd
> /home/user/documents

Ответ 3

вы можете использовать pushd ., чтобы запомнить один каталог и popd, чтобы вернуться к нему.

Ответ 4

Если есть команда, я использую много, я просто сделаю псевдоним.

Вы можете ввести

alias ..='cd ..'
alias ...='cd ../..'

Затем вы можете просто использовать .. для перехода на один уровень вверх и ..., чтобы перейти на два уровня вверх.

Ответ 5

Вот небольшое улучшение, которое я нашел:

Обычно, когда вы возвращаетесь в один каталог с помощью cd.., вы в конечном итоге переходите в один каталог после. Чтобы сделать эту работу, вам нужно использовать функции, а не псевдонимы, поэтому вместо:

alias ..="cd ../"
alias ..2="cd ../../"

вы можете использовать:

..()
{
cd ../[email protected]
}
..2()
{
cd ../../[email protected]
}

Однако, после использования этого, быстро становится очевидным, что вам не хватает завершения команды для этой функции, что делает его гораздо менее полезным, чем могло бы быть. Таким образом, я вернулся и добавил свои собственные функции завершения bash для этой функции, которые можно вставить в ваш ~/.bashrc или любой файл (например, ~/.bash_completion), который вызывается из вашего ~/.bashrc, если хотите чтобы избежать беспорядка. Вот код завершения:

_..()
{
local cur=../${COMP_WORDS[COMP_CWORD]}
COMPREPLY=( $(compgen -d — $cur) )
local i=${#COMPREPLY[*]}
while [ $((--i)) -ge 0 ]; do
COMPREPLY[$i]=$(echo ${COMPREPLY[$i]} | sed -r ‘s/(\.\.\/)*//’)
done
}
complete -F _.. -o nospace -S / ..

_..2()
{
local cur=../../${COMP_WORDS[COMP_CWORD]}
COMPREPLY=( $(compgen -d — $cur) )
local i=${#COMPREPLY[*]}
while [ $((--i)) -ge 0 ]; do
COMPREPLY[$i]=$(echo ${COMPREPLY[$i]} | sed -r ‘s/(\.\.\/)*//’)
done
}
complete -F _..2 -o nospace -S / ..2

Ответ 6

Вы можете сделать это следующим образом: cd ../../../../../../../

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

Ответ 7

Не помню, откуда я скопировал эту функцию, но она отлично работает для меня (вы можете добавить файл .bashrc, например)

up() { local p= i=${1:-1}; while (( i-- )); do p+=../; done; cd "$p$2" && pwd; }

например. для перехода 7 каталогов вверх нужно набрать up 7

Ответ 8

for i in {1..7}; do cd ..; done

Ответ 9

Вы можете добавить следующую функцию в .bashrc:

# ~/.bashrc
up() {
  for D in $(seq 1 $1);
     do 
       cd ..
     done
}

Таким образом, использование будет просто:

user ~ $ up 3
user / $

Ответ 10

Нм, я так не думаю.

Но вы можете написать cd ../../../.. (и т.д.) вместо 7 раз cd..

Ответ 11

Эта отличная функция поддерживает движение вверх в обоих направлениях.

Если вы находитесь в /a/b/c/d, то "вверх до 1" приведет вас к /a/b/c и т.д. Это довольно стандартно и распространяется в большинстве других ответов.

Теперь, для специальной части; используя отрицательные числа, вы поднимаете вас с другого направления. Итак, если вы находитесь в /a/b/c/d, "вверх -1" приведет вас к /a и т.д.

function up() {
    UP=$1

    if [[ $UP =~ ^[\-0-9]+$ ]]; then
        if ((UP<0)); then
            UP=${UP#-}
            cd $(echo $PWD | cut -d/ -f1-$((UP+1)))
        else
            cd $(printf "%0.s../" $(seq 1 ${UP}));
        fi
    fi
}

Доступно для загрузки/установки на github.

Ответ 12

для пользователей рыбы,

function cdd
   for x in (seq $argv)
     cd ..
   end
end

и сохраните его: ~/.config/рыба/функции/cdd.fish

и просто $ cdd 3 Чтобы перейти в 3 каталога.

Ответ 13

Вы можете попробовать это решение. Это отлично работает для меня:

#!/bin/bash

#this sctipt should take one parameter - number of steps. And do "cd" command step times.
# example usage: cd `cde 3` 

NEW_PATH=$(pwd)

step="../"

upper=""

for i in seq $1  
do 
        upper="$upper$step"
done

echo $upper

Ответ 14

Я сделал небольшую утилиту, которая немного облегчает навигацию по глубоким структурам каталогов: https://github.com/ianatha/up.

С установленным, вы могли бы:

$ pwd
/Users/jdoe/Developer/backend/src/main/java/com/example/service/db/
$ up example
$ pwd
/Users/jdoe/Developer/backend/src/main/java/com/example/
$ up 4
$ pwd
/Users/jdoe/Developer/backend/src/