bash에 대한 디렉토리 히스토리가 있습니까?


26

bash의 역 검색 기록 (Ctrl-r)과 같은 것이 있지만 디렉토리에만 있습니까?

딥 폴더 계층 구조로 이동하려는 경우 역방향 검색 기록과 같은 것을 사용하고 싶지만 폴더 이름 만 찾고 절대 경로를 제공합니다.

본질적으로 !?앞면에 cd가있는 일치하는 명령 만 사용하는 것과 비슷한 결과를 제공하므로 결과와 전체 경로를 단계별로 수행 할 수 있습니다.

지금까지 내가 찾은 최고의 솔루션은 bashmarks 입니다.


1
나는 최근에 z를 사용하기 시작했고 지금까지 작동하는 것처럼 보이지만 몇 가지 경로에 사용했습니다.
Rob

답변:


11

autojump를 살펴 보십시오 .

가장 많이 사용되는 쉘 명령 중 하나는 "cd"입니다. 내 친구들 사이의 빠른 조사에 따르면 입력 한 모든 명령의 10 ~ 20 %가 실제로는 CD 명령이라고합니다. 불행히도, cd를 사용하여 시스템의 한 부분에서 다른 부분으로 이동하려면 거의 전체 경로를 입력해야합니다. 이는 실용적이지 않으며 많은 키 입력이 필요합니다.

autojump는 파일 시스템을보다 빠르게 탐색 할 수있는 방법입니다. 명령 줄에서 가장 많이 사용하는 디렉토리의 데이터베이스를 유지 관리하여 작동합니다. jumpstat 명령은 데이터베이스의 현재 내용을 보여줍니다. 데이터베이스를 사용하려면 약간의 작업이 필요합니다. 데이터베이스가 합리적으로 완성되면 다음을 입력하여 일반적으로 "cd"디렉토리로 "점프"할 수 있습니다.
j dirspec


터미널 제목 에 문제가 발생할 수 있습니다 .
Daniel Beck

6

있다

cd -

즉, "cd [space] [hyphen]"명령으로 이전의 디렉토리 (기본적으로 "깊이 1의 기록")로 이동합니다. 반복 된 "cd-"는 두 디렉토리간에 전환됩니다.

인용 매뉴얼 페이지 :

다음 피연산자가 지원됩니다 : [...]

피연산자로 [하이픈]을 사용하는 경우 다음 명령과 같습니다.

      cd "$OLDPWD" && pwd

불행히도, 나는 실제 내장 디렉토리 히스토리를 모른다.


pushd dir popd디렉토리의 히스토리 스택을 저장할 수 있습니다 쌍. 이것은 다른 폴더에서 작동하는 스크립트에서 실제로 유용합니다.
Jakuje

내가 알고 pushd하고 popd, 또한 이미 여기에 언급되어있다.
apurkrt

3

bash는 push / popd / dirs를 푸시했습니다. 내 .bashrc에 디렉토리를 bash의 스택에 자동 푸시하기 위해 이것을 가지고 있습니다.

#let cd also pushd directories into stack. Use popd to reverse stack
function cd ()
{
  if [ -e $1 ]; then 
    pushd $1 &> /dev/null   #dont display current stack 
  fi
}

사용하여 팝 popd하고 스택을 사용하여 표시dirs


2

나는 z-jump에 대한 좋은 경험을 가지고 있습니다. 경로를 밟지 않고 최종 목적지에 대해서만 완료 할 수는 있습니다. 그러나 탭이 완료되면 전체 경로가 표시됩니다.


1

내 자신의 경험으로 차임하기 위해 얼마 전에이 요구 사항을 해결하는 간단한 스크립트를 작성했습니다. 내장 파일에 새 디렉토리 위치를 추가하는 간단한 함수로 내장 cd 명령을 재정의 한 다음 Python 스크립트를 사용합니다. bash의 역방향 명령 검색과 같이 검색어를 입력 할 때 순서가 지정된 디렉토리 목록을 동적으로 업데이트하는 bash 인터페이스를 제공하십시오.

궁금한 사람들을 위해 git-hub 에서 사용할 수 있습니다 .


기어에 바위
다스

1

ltcd디렉토리 기록을 빠르게 탐색 할 것을 권장합니다 .

https://github.com/dczhu/ltcd

CD 데모 gif

생활을보다 쉽게하기 위해 다음과 같은 기능을 제공합니다.

  • 모든 터미널 탭 / 창에서 최근에 방문한 디렉토리를 보여주는 글로벌 디렉토리 목록.
  • 현재 셸 세션에 로컬 인 로컬 디렉토리 목록.
  • 두 목록 모두 j / k (아래로 / 위로), 숫자 및 단어 검색을 사용하여 빠른 탐색을 지원합니다.
  • 전역 자유 점프 (예 : "cd dir"또는 "cd ar"는 / path / to / foo / bar / directory /로 이동)

1

bash에서 작동 하는 oh-my-zsh의 명령 과 유사한 기능을 가진 스크립트 를 만들었습니다 . oh-my-zsh를 사용한 적이 있으면 터미널을 종료 할 때마다 명령에서 제공 한 디렉토리 기록 이 재설정 되는 것을 알 수 있습니다 . 그러나이 스크립트 를 사용하면 발생하지 않습니다 .dirs -vdirs -v

기능 :

  • 로 가장 최근에 사용한 10 개의 디렉토리 목록을 표시하십시오 d.

  • 목록에있는 디렉토리 번호를 입력하여 목록의 디렉토리로 이동하십시오. 10 번째 디렉토리로 이동하려면 10 대신 0을 사용해야합니다.

  • v( vim )을 사용 하여 파일을 편집하거나 o( xdg-open )을 사용하여 해당 디렉토리에서 파일을 열 때마다 디렉토리 경로가 목록의 맨 위에 놓 입니다. 또는 원하는 경우 디렉토리를 방문 할 때마다.

여기 에서 실제로 볼 수 있습니다 .


0

글쎄, 당신은 당신이 코드를 추가 할 수 있습니다 ~/.bashrc, 어떤

  1. 사용자 정의 CD 명령을 제공합니다

        function cd ()
        {
            exists=false
            for dir in "${CDHIST[@]}"; do
                [ "$dir" == "$1" ] && {
                    exists == true
                    break
                }
            done
    
            $exists || {
                len=${#CDHIST[@]}
                ${CDHIST[$len]} = "$1"
            }
    
            builtin cd "$1"
        }
  2. cd history search 명령을 제공합니다.

    function cdhist ()
    {
        #TODO: Make this magical.
    
        for dir in "${CDHIST[@]}"; do
            echo "$dir"
        done
    }

물론, 내가 제공 한 cdhist 명령은 매우 기본적이며 원하는 것이 아닙니다. 그러나 원하는 것과 유사한 것을 달성하기 위해 case 문 또는 매개 변수 확장을 사용할 수 있습니다.

당신은 전체 추가하는 데 사용할 수있는 몇 가지 "프로그램 종료"기능을 추가 할 수 cd /path/to/mydir의 고유 하위 문자열을 기반으로 명령을 /path/to/unique/mydir하는 방법은 아직 입력을 필요로하지만, cd unique/mydir<tab>.


1
코드를 잘못 읽고 bash dirs명령을 찾았 my_dirs습니다.
idbrii 2016 년

1
시원한. bash는이를 지원할뿐만 아니라; 그것을 구현 합니다. 나는 bash의 깊은 마법을 공부할 시간이 더 있었으면 좋겠다. 물론 이것은 CD가 아닌 푸시 된 기억 만 지원합니다. 그러나 나는 alias cd=pushd가장 우아한 형태 라고 생각 합니다.
jpaugh

0

당신은 자신 구축 할 수 cd와 명령 pushd, popd, dirs 내장 명령을.

용법

  • cd -- (현재 기록 목록)

  • cd -num (num 디렉토리로 이동)

  • cd - (이전 디렉토리로 이동)


function cd()
{
    local hnum=16  # number of entries
    local new_dir index dir cnt
    if ! [ $# -eq 0 ]; then
        if [[ $# -eq 2 && $1 = "--" ]]; then
            shift
        else 
            if ! { [ $# -eq 1 ] && [[ $1 =~ ^(-[0-9]{,2}|-|--|[^-].*)$ ]] ;}
            then
                builtin cd "$@"
                return
            fi
        fi
    fi
    [ "$1" = "--" ] && { dirs -v;  return ;}
    new_dir=${1:-$HOME}
    if [[ "$new_dir" =~ ^(-[0-9]{,2}|-)$ ]]; then
        index=${new_dir:1}
        [ -z "$index" ] && index=1
        new_dir=$(dirs -l +$index) || return
    fi
    pushd -- "$new_dir" > /dev/null || return
    popd -n +$hnum &> /dev/null
    new_dir=$PWD cnt=1
    while dir=$(dirs -l +$cnt 2> /dev/null); do
        if [ "$dir" = "$new_dir" ]; then
            popd -n +$cnt > /dev/null
            continue
        fi
        let cnt++
    done
}

export -f cd

-1

이 툴을 통합하여 포괄적 인 글로벌 CLI 히스토리를 저장하기위한 이전 솔루션과 percol (C ^ R로 맵핑 됨)이라는 대화식 그 렙핑 툴을 결합했습니다. 명령을 실행 한 곳에서 명령을 검색하거나 명령으로 디렉토리를 찾는 데 사용합니다. 사용하기 시작한 첫 번째 머신에서 여전히 매끄러운 상태입니다. 이제 2 년 이상 된 CLI 내역이 있습니다.

grep 도구는 경로와 명령 모두에서 작동하지만 여전히 유용 할 수 있습니다. zsh의 'dirs -v'도 참조하십시오.

https://github.com/gawells/ariadne


경로, 명령 및 날짜가 포함 된 CLI 기록을 저장합니다. 그것은 경로 전용이 아니지만 여전히 dir history (bash 및 zsh)를 역 검색하는 데 유용합니다.
Gordon Wells

나는 당신이 당신의 도구에 연결하는 것을 잊었다 고 생각합니다. 귀하의 설명에서, 명령이 호출 된 곳에서만 작동한다는 점이 부족하다고 생각합니다. 그래서 cd share/man난에는 / usr 이미 해요 경우에만 작동합니다.
idbrii

죄송합니다! 내 나쁜, 나는 텍스트에 URL을 넣어 줄 알았는데 뭔가 잘못되었다고 눈치 채지 않았다
Gordon Wells
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.