cd를 사용하지 않고 디렉토리의 여러 단계로 돌아가는 명령이 있습니까?


14

나는 끊임없이 'cd ../../../../'를 가고 있습니다. 'cmd 4'로 이동할 수있는 명령 / 별칭이 있고 4 개의 디렉토리를 다시 가져 갔습니까?


ls? 확실 cd합니까?
Chris Jester-Young

그래, 난 그냥 서두에 이것을 썼다;) 지금 편집.

이 일을 하시겠습니까? :alias cmd5 = "cd ../../../../../"
ypercubeᵀᴹ

글쎄, 나는 1 ~ 10 정도 정도 쓸 수 있다고 생각하지만, 영리한 방법으로하는 것이 좋을 것입니다. 그건 정말 나와 함께 앉아 있지 않습니다. 그러나 다른 해결책이 없다면 그렇게 할 것입니다.

답변:


16

이것을 당신의 것으로 넣으십시오 ~/.bashrc:

cdup() {
  levels=${1-1}
  while ((levels--)); do
    cd ..
  done
}

(이름 cdup은 해당 FTP 명령에서 따 왔으며 FYI입니다.)


응답에 감사드립니다 .1 줄 더 짧아서 jleedev의 답변과 함께 갔으며 누가 선택할지를 결정할 수 없었습니다! 어쨌든 고마워!

@Muu : 두 가지 대답은 모두 효과가 있지만 많은 수준에서 효과가 있으며 @jleedev는 소수의 소수 (스택 제한이 무엇이든)에만 작동합니다. ;-) (내가 얻을 위해 노력하고있어, 난 당신이 한계 중 하나의 방법을 공격하지 않을 거라고 확신 해요,하지만 내 더 일반적이다. :-))
크리스 광대 - 젊은

페어 포인트, 그때 당신에게 답을주었습니다. 죄송합니다. jleedev – 해결책을 잊어 버릴 것이므로 솔루션을 계속 사용할 것입니다. :)

11

나는 그런 상황에서 'pushd'와 'popd'를 사용하도록 배웠다.

예를 들어 'pushd'를 입력하십시오. 그런 다음 'cd / home'. 이제 'popd'를 입력하면 시작 위치로 돌아갑니다.

'pushd'/ 'popd'는 스택이므로 원하는만큼 많은 디렉토리를 푸시 할 수 있지만 마지막으로 팝업했을 때 마지막 디렉토리입니다.


흠. 듣지 못했습니다. 내가 찾던 것에 맞지 않지만 그것을 사용할 것입니다. 감사.

10

물론, 왜 :

up () {
    [$ # = 0] && cd .. && 리턴
    [$ 1 = 0] && 반환
    cd .. && up $ (($ 1-1))
}

배쉬는 꼬리 재귀가 아닌가? 그렇게하면 오버플로가 쌓일 수 있습니다 up 500. :-)
Chris Jester-Young

6
귀하의 디렉토리가 그 깊이에 중첩되어 있다면 내 동정심이 있습니다.
Josh Lee

이것을 사용했습니다. Chris를 한 줄로

@ 무우 : 나는이 질문이 코드 골프 몰랐어요! ;-) BTW, 우리와 함께하십시오! codegolf.stackexchange.com
Chris Jester-Young

3
@Muu 재귀는 일반적으로 쉘 스크립트를 작성하는 올바른 방법 이 아닙니다 .
Josh Lee

4

빠르고 더러운 :

cmd () { dir=.; for i in $(seq 1 $1); do dir=$dir/..; done; pushd $dir; }

디렉토리를 한 번만 변경하도록 공식화되었습니다.


2

다른 방법은 다음과 같습니다.

function cdup
{
    cd $(for ((i=0 ; i<$1 ;i++)); do printf "../" ; done)
}

1

위치 마커 사용 pushdpopd설정 을 살펴보고 변경 한 디렉토리에서 쉽게 돌아갈 수 있습니다.

자주 사용하는 디렉토리 이름으로 변수를 설정 한 다음 CD를 넣을 수도 있습니다.

MYPROJ=~/projects/name/src
cd $MYPROJ
proj1='cd $MYPROJ'

1

나는 다음을 입력 할 수있는 autojump 를 사용합니다.

j h
>> /home/cjulien
j et
>> /etc

그것은 당신의 습관에서 배울 수 있으며 매우 가볍고 중독성이 있습니다.)


1

printf그런 다음 경로를 사용하여 경로를 작성하십시오 cd.

cdup() {
    local path
    printf -v path '%*s' "${1:-1}"
    cd "${path// /../}"
}

로 사용:

cdup 4 # to go up four directories
cdup 1 # to explicitly go up one directory
cdup   # to implicitly go up one

0

당신에게 유용한 두 가지 생각 :

  1. cd-
    마지막 디렉토리로 다시 변경하십시오. 코드 트리에서 깊이 들어가서 루트로 돌아 가기 위해 항상 이것을 사용합니다. 변화.

  2. cdd old new
    이것은 과거에 비슷한 나무 사이를 이동하는 데 사용했던 스크립트 함수였습니다. 기본적으로 두 가지 주장이 있었고 경로에서 정규 표현식을 사용하여 지점과 그 사이를 이동하는 데 좋습니다. 예를 들어 ~ / bzr / web / trunk / path / to / feature에 있고 ~ / bzr / web / feature-branch / path / to / feature에 도달해야하는 경우 수행 cdd trunk feature-branch합니다. 내가 가진 구현은 AIX에서 구식 셸 언어로 이루어졌지만 매우 사소한 것이기 때문에 필요한 경우 원하는 셸로 쉽게 구현할 수 있어야한다. ... / {product} / {version} / {release} / {src, bld, dbg, pkg, tst} / {component} / ...와 같은 구조이기 때문에 매우 유용했습니다. 그 나무에서 아주 빨리 미쳤어.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.