Como posso mudar para o diretório anterior em vez de subir?

209

Atualmente, passo muitas das minhas horas de trabalho indo e voltando entre dois caminhos que estão muito abaixo da árvore e desviam um do outro na raiz. Parece-me que minha vida seria muito mais fácil se houvesse um argumento para cd que leva o usuário ao último diretório em que eles estavam.

Ou seja, se eu estiver em:

/etc/foo/bar/baz/moo

e digite:

cd /var/lib/fubarred_app/blargh/logs

Gostaria de poder voltar ao primeiro diretório sem precisar digitar o caminho inteiro novamente.

A chave de memória não a corta, já que eu uso comandos suficientes em cada lugar que é tão difícil de voltar e encontrar o caminho que quero, como é para eu mesmo digitar.

Existe um comando curto que me permite ir ao diretório anterior?

    
por Yitzchak 17.08.2011 / 22:18

12 respostas

292

O comando

cd -

realizará a troca que você precisa na maioria dos shells convencionais, a variante mais antiga é

cd "$OLDPWD"

que usará a variável de ambiente que contém o diretório de trabalho anterior.

A página man do POSIX para cd menciona:

DESCRIPTION

If, during the execution of the above steps, the PWD environment variable is changed, the OLDPWD environment variable shall also be changed to the value of the old working directory (that is the current working directory immediately prior to the call to cd).

OPERANDS

  -  When a hyphen is used as the operand, this shall be equivalent to the command:

cd "$OLDPWD" && pwd 

which changes to the previous working directory and then writes its name.

    
por 17.08.2011 / 22:23
105

Além da resposta de bryan, vale mencionar que também há pushd e popd , que criam diretórios como uma pilha. Isso também está disponível no Windows NT; no entanto, não está disponível em todos os shells.

Por exemplo, podemos ir a três diretórios diferentes e você sempre verá sua pilha quando chamar pushd :

charon:~ werner$ pushd Documents/
~/Documents ~

charon:Documents werner$ pushd ../Movies/
~/Movies ~/Documents ~

charon:Movies werner$ pushd ../Downloads/
~/Downloads ~/Movies ~/Documents ~

E quando você chama popd três vezes seguidas, chega a esses diretórios na pilha na ordem inversa. Ao mesmo tempo, a pilha será esvaziada novamente.

charon:Downloads werner$ popd
~/Movies ~/Documents ~

charon:Movies werner$ popd
~/Documents ~

charon:Documents werner$ popd
~

charon:~ werner$ popd
-bash: popd: directory stack empty

Se você estiver usando o Zsh; ele tem uma opção AUTO_PUSHD, que automaticamente empurra cd para a pilha.

    
por 17.08.2011 / 22:35
13

Existem alguns programas "jump"

  • autojump (mantido com recursos básicos)
  • j2 (aparentemente sem manutenção com alguns recursos avançados)
  • z (versão mantida de "j" com recursos avançados)

Eles facilitam qualquer tipo de navegação no diretório. Você usa isso dando uma porção do caminho e isso simplesmente funciona.

No seu caso

~$ j baz 
/etc/foo/bar/baz/moo$

~$ j bla 
/var/lib/fubarred_app/blargh/logs$

Você pode atribuir qualquer letra que quiser a esses programas, "j" é tradição:)

j2 e z suportam vários termos de pesquisa, ...

~$ j baz src
/home/me/projects/baz/repository/trunk/src$

... e mais opções.

~$ j -l  # list directories by "frecency"(frequency + recency) score
~$ j -r PATTERN # match by rank only, not recency
~$ j -t PATTERN # match by recency only, not rank
    
por 18.08.2011 / 01:52
10

Além de cd - e cd $OLDPWD

Você pode usar a pesquisa de histórico pressionando CTRL-R e digitando algumas letras do comando cd digitado anteriormente. Pressionar CTRL-R repetidamente trará correspondências mais antigas.

Este método será mais útil se você tiver mais de dois caminhos para alterar.

    
por 18.08.2011 / 11:44
9

Você pode usar isso para criar facilmente aliases para diretórios:

a() { alias $1=cd\ $PWD; }

a 1

e mais tarde:

1
    
por 18.08.2011 / 03:50
6
Os bashmarks permitirão que você marque uma série de pastas e salte entre elas com a conclusão da tabulação:

To bookmark a folder, simply go to that folder, then bookmark it like so:

bookmark foo

The bookmark will be named "foo". When you want to get back to that folder use:

go foo

To see a list of the bookmarks:

bookmarksshow

Tab completion works, to go to the shoobie bookmark, simply:

go sho[tab]
    
por 18.08.2011 / 10:54
4

Outra possibilidade seria manter apenas duas janelas abertas, com uma posicionada em cada diretório.

    
por 18.08.2011 / 05:00
4

Sei que esta não é uma resposta estrita à sua pergunta, mas é útil para alcançar o objetivo de levar você a seus diretórios importantes .

em qualquer descida UNIX-bash você pode usar CDPATH para estender a pasta na qual o comando cd procura.

do meu arquivo .bashrc:

export CDPATH='.:~/source/'

cd pesquisa pela primeira vez na sua pasta atual e, em seguida, pesquisa no meu diretório de projetos de codificação.

cd myproject

.. leva-me para ~ / sources / myproject de onde quer que eu esteja atualmente de pé.

Recurso pequeno e simples que ajudou muito a minha navegação por diretório.

    
por 19.08.2011 / 13:11
3

Sim, cd - é o caminho a percorrer, mas eu me preocupo com a falta de poder que você tem em sua concha. popd e pushd também são bons, e que j também parece bom.

Vou jogar meu próprio utilitário no anel ... é algo que venho criando, personalizando e migrando comigo nos últimos 10 anos, e funciona muito bem para o que eu quero que ele faça.

Postagem do blog para o meu utilitário de gerenciamento de diretórios

Se isso funciona para você, então é incrível, mas se isso não for possível, prometa que vai conseguir outra coisa :) Você simplesmente não pode viver com cd sozinho.

    
por 18.08.2011 / 16:18
3

Se você tiver apenas dois diretórios, a maneira mais fácil é, como mencionado,

cd -

Quando eu tive essas coisas no passado, eu tive alguns truques que fiz, que podem ser úteis.

  1. Coloque os comandos alias no arquivo .cshrc, algo parecido com isto

    alias moo /etc/foo/bar/baz/moo  
    alias logs cd /var/lib/fubarred_app/blargh/logs
    
  2. Vincule atalhos aos caminhos de interesse do meu diretório inicial. Isso é uma coisa de uma só vez.

    cd ~
    ln -s /var/lib/fubarred_app/blargh/logs blargh
    ln -s /etc/foo/bar/baz/moo
    

Isso permitiria alterar um diretório com a mesma facilidade:

   cd ~/moo
   cd ~/blargh
    
por 19.08.2011 / 05:08
2

Autojump é um comando bash / sh / zsh "cd" que de suas ações, veja este video .

para que isso te mova para o moo depois de ter aprendido as últimas pastas

j moo
    
por 18.08.2011 / 20:32
2

feixe

Eu tenho minha própria ferramenta, mas vou dar uma olhada na ferramenta Dereks e j também.

É claro que a primeira escolha para ir e voltar é

cd -

Minha ferramenta é destinada a diretórios com nomes exclusivos em sistemas, em que locate está disponível; ele procura um nome de diretório correspondente e pula para a primeira correspondência:

beam () 
{ 
    ldir=$(locate $1 | egrep "$1$" | head -n 1);
    if [[ -d $ldir ]]; then
        echo $ldir;
        cd $ldir;
    else
        echo "no directory "$ldir;
    fi
}

Dependências:

  • localize
  • grep
  • cabeça

Desvantagens:

  • diretórios mais recentes que o último updateb-run não são encontrados
  • se mais de um diretório coincidir, depende da sua sorte, seja você transferido para o que você tinha em mente.

Melhorias / modificações:

  • em vez de escolher o primeiro diretório, o código pode ser modificado para exibir uma lista de opções, solicitando que o usuário insira 1,2,3, ... para ir para / bin, / usr / bin, / usr / local / bin ...

Uso:

  • coloque a função em /etc/bash.bashrc ou ~ / .bashprofile, para usá-la de maneira conveniente.

Vantagem da minha solução:

  • não está limitado a dois diretórios, como cd -
  • você não precisa visitar os diretórios uma vez, antes de usar o feixe.
por 18.08.2011 / 21:52

Tags