Salto rápido de caminho

6

Eu estava apenas em uma palestra, onde notei o palestrante usando um comando (provavelmente com viés) para pular para uma pasta específica.

Exemplo:

~/code$ j sciproj
~/projects/sciproj2011/$

Isso pareceu bem legal, então comecei a pensar:

Este é um utilitário padrão e, em caso afirmativo, qual é o nome?

Eu tenho duas teorias sobre como isso funciona:

  1. Ele pode criar, excluir e pular para aliases diretamente da linha de comando no estilo do exemplo, sem ter que configurar aliases em um arquivo de configuração ou script ou qualquer outra coisa manualmente.

  2. Ele procura no diretório inicial uma pasta correspondente ao nome e salta para ele.

A segunda opção parece um pouco lenta, no entanto, o primeiro seria o preferido.

    
por Sebastian Paaske Tørholm 11.02.2011 / 12:26

3 respostas

6

Como complemento ao comentário da sagarchalise:

Está em vigor: link

Deve funcionar em versões mais antigas também.

    
por Clausi 11.02.2011 / 13:09
2

Que tal isso?

function j() { for dir in ~/projects/$@*; do if [ -d $dir ]; then cd "$dir"; fi; done ;}

Ele encontra a correspondência mais próxima possível. Então, digamos que eu tenha uma listagem de dir assim:

~/projects/
~/projects/apples/
~/projects/apples-and-pears/
~/projects/cabbage/

j a corresponderá a ambos os apples* dirs, mas como apples-and-pears é o mais tardio, ele irá cd para o último, e é aí que você vai acabar (a falha nessa função). j c colocará você em ~/projects/cabbage/ .

Batoque em um terminal para testá-lo e quando você estiver feliz, basta plonk-lo no final de ~/.bashrc .

Edit: Eu também estou brincando fazendo uma variante find , mas não é tão boa (mais lenta e menos precisa). Sinta-se à vontade para entrar em contato com ele.

function j() { cd $(find ~/projects -maxdepth 1 -type d -name "$@*"); }
    
por Oli 11.02.2011 / 12:56
0

Normalmente, você pode usar popd , pushd e dirs para pular entre algumas pastas. Mas no seu caso, é um alias personalizado que você pode definir em seu arquivo ~ / .bash_profile.

No exemplo:

# Change dir via find
# Usage: cdf (dir)
cdf() {
  pushd $(find . -name )
}

E então cdf some_dir vai pular para a pasta ignorando as sub-dirs.

Exemplo ao vivo para pesquisar nomes de pastas exatas (ignorar prompt):

~/$ cdf() { pushd $(find . -name ); }
~/$ mkdir -p ab/cd/ef/gh/ij/kl
~/$ cdf kl
    ~/ab/cd/ef/gh/ij/kl ~/
~/$ pwd
     ~/ab/cd/ef/gh/ij/kl
kl$ popd # We're going back to our previous folder.
~/$ pwd
    ~/

Para um alias semelhante para pastas que contêm um texto parcial:

cdf() { pushd $(find . -name \*\*); }

Exemplo de arquivo .bash_profile .

    
por kenorb 27.08.2014 / 18:15