Pytanie Idź kilka katalogów w Linuksie


Kiedy chcę iść o jeden katalog w górę, używam

cd ..

Ale kiedy chcę przejść 7 katalogów w górę, jest jakikolwiek sposób na zrobienie tego innego niż wpisanie siedmiu (7) razy cd .. ?


33
2017-08-30 13:39


pochodzenie


Na marginesie, aby przejść o jeden poziom wyżej cd.. i cd .. są równoważne w oknach, ale Linux jest zbyt surowy i odrzuca cd.. polecenie jako nieprawidłowe polecenie tylko z powodu braku miejsca. - RBT


Odpowiedzi:


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

Kolejną użyteczną wskazówką nawigacyjną jest, na przykład, powiedzmy, że nadal przełączasz się z katalogu (zadzwoń do A) na inny (nazwij go B), to jest 7 katalogów w twoim przypadku.

Więc jeśli jesteś w katalogu A:

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

To przeniesie się z powrotem do katalogu A. - rozwija się do poprzedniego katalogu, w którym byłeś.


50
2017-08-30 13:43



cd - polecenie jest interesujące. Czy istnieje odpowiednik systemu Windows dla tego samego? - RBT
Chociaż jest to "akceptowana" odpowiedź, widzę, że odpowiedź @ dav poniżej jest bardziej niezawodnym rozwiązaniem. Długa lista "../" jest zarówno uciążliwa, jak i podatna na błędy. Jeśli Twój profil zezwala na skrypt aliasowy, jest bardziej skalowalny. Wersja aliasu bash zachowuje także obsługę "cd -". - ZaydH


Utwórz alias (w tobie ~ / .bashrc)

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

I użyć:

$ cd.. 7

UPD: Lub utwórz bardziej wydajną odmianę, cd na katalog w aktualnej ścieżce:

# 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..'

posługiwać się:

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

14
2017-10-01 05:47





możesz użyć pushd . zapamiętywać jeden katalog i popd wrócić do tego.


7
2017-08-30 13:47





Jeśli istnieje polecenie, którego używam dużo, utworzę alias.

Możesz pisać

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

Wtedy możesz po prostu użyć .. iść o jeden poziom wyżej i ... przejść o dwa poziomy wyżej.


7
2017-08-30 13:50





Oto niewielka poprawa, którą znalazłem:

Zwykle po powrocie do jednego katalogu z cd .. kończy się kolejny katalog po. Aby to zadziałało, musisz używać funkcji zamiast aliasów, więc zamiast:

alias ..=”cd ../”
alias ..2=”cd ../../”

możesz użyć:

..()
{
cd ../$@
}
..2()
{
cd ../../$@
}

Jednak po użyciu tego, szybko staje się oczywiste, że brakuje ci uzupełnienia poleceń dla tej funkcji, czyniąc ją mniej użyteczną niż mogłaby być. Dlatego wróciłem i dodałem własne funkcje zakończenia basha dla tej funkcji, które można wkleić do twojego ~ / .bashrc lub dowolnego pliku (np. ~ / .Bash_completion), który jest wywoływany z twojego ~ / .bashrc, jeśli chcesz uniknąć nieład. Oto kod zakończenia:

_..()
{
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
2018-04-14 08:35





Możesz to zrobić w ten sposób cd ../../../../../../../

Tam jest fajny artykuł o niektórych hackach, które możesz zastosować, by poprawić nawigację.


5
2017-08-30 13:43





Nie pamiętam, skąd skopiowałem tę funkcję, ale działa to dla mnie dobrze (możesz umieścić .bashrc plik na przykład)

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

na przykład aby przejść do 7 katalogów, konieczne jest wpisanie up 7


4
2017-12-04 14:27





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

3
2017-08-30 13:44