Atalho para alternar para um determinado diretório

12

No terminal Ubuntu, passo um tempo considerável para mudar para um diretório específico toda vez que o computador é iniciado. Existe alguma maneira de facilitar esse processo? Existe alguma tecla de atalho ou alguma alteração rápida de diretório que eu possa usar (como discagem rápida em um telefone)?

 eg:
    cd 1:Changes to saved directory one
Desenvolvedor Android
fonte
Quatro anos desde que essa pergunta foi feita e ninguém mencionou o CDPATH até hoje. :(
kojiro
Suponho que isso possa depender do seu console, mas no terminal do Kubuntu há um menu Favoritos, onde posso apenas marcar um diretório e pular para ele dessa maneira!
Pixel

Respostas:

12

Existem duas opções:

  1. Se você deseja estar em um diretório específico toda vez que abrir um terminal bash, edite seu ~/.bashrcarquivo e apenas adicione a linha cd Directory, por exemplo cd ~/Desktop.

  2. Se você deseja ter vários atalhos, sempre pode usar variáveis ​​globais, que podem ser definidas no seu ~/.bashrcarquivo da seguinte maneira export a=/tmpe, em seguida, você poderá fazer o cd $aque o levará /tmp.

Lembre-se de que após editar seu .bashrcarquivo, você deve reiniciar o terminal ou abrir um novo.

Dan
fonte
3
Para evitar reiniciar o terminal, você pode usar source ~/.bashrcou, mais curto . ~/.bashrc,.
Gerhard Burger
18

Também dê uma olhada autojump, ele cria um banco de dados com diretórios visitados anteriormente e então você pode pular para ele. Então, por exemplo, você tem

/home/user/this/long/and/annoyingly/deep/directory/workstuff

então, se você o visitou uma vez, pode pular para ele

j workstuff

ou mesmo

j stuff

porque também funciona com correspondências parciais. Se mais de um diretório corresponder, você pula para o mais visitado, se esse não é o desejado, repita o comando para ir para o segundo.

No entanto, fica melhor! Se você também tiver o diretório

/home/user/stuff

e você faz

j stuff 

e então TabTabTabvocê obtém (na ordem dos mais visitados)

$ j stuff__
stuff__1__/home/user/this/long/and/annoyingly/deep/directory/workstuff
stuff__2__/home/user/stuff

e então você pode simplesmente pressionar o número do diretório que você deseja!

Para instalar, você pode simplesmente usar sudo apt-get install autojumpe, em seguida, você precisa adicionar

source /usr/share/autojump/autojump.bash

para o seu ~/.bashrc.

Mais informações aqui: https://github.com/wting/autojump (também instruções sobre como instalar isso no src, que fornece a versão mais recente)

Gerhard Burger
fonte
1
crtl + r em um terminal também procura por "correspondências parciais" nos comandos anteriores. Realmente útil também.
Dan
6

Os aliases de bash são úteis para criar atalhos para executar comandos normalmente.

  • Em ~/.bashrc, adicione uma linha semelhante à seguinte para criar o alias:

    alias jump1='cd /long/path/name/that/is/frequently/used'
    
  • Feche e abra o terminal novamente ou execute source ~/.bashrc.

  • A partir de agora, você pode simplesmente executar jump1para executar esse cdcomando longo .

Veja também:

Flimm
fonte
4

Embora já existam boas respostas, pensei em mencionar por completo os antigos pushde os recursos do popdBash, permitindo que você se mova muito rapidamente entre diretórios em caminhos profundos em seu sistema de arquivos. Ao contrário dos autojumpindicadores mencionados pelo burger.ga , a pilha de diretórios criada usando pushdé apenas temporária.

Como o manual do GNU observa , pushde popdos Bash são usados ​​para construir uma pilha de diretórios temporária que é um

lista de diretórios visitados recentemente. O pushd builtin adiciona diretórios à pilha à medida que altera o diretório atual, e o popd builtin remove os diretórios especificados da pilha e altera o diretório atual para o diretório removido. Os dirs internos exibem o conteúdo da pilha de diretórios.

Demora um pouco para se acostumar, mas há muitos tutoriais úteis disponíveis neste blog e neste site, por exemplo. Não há páginas de manual separadas para os comandos, pois elas estão incluídas na página de manual do Bash, mas para uma referência rápida, você pode visualizar a página do GNU Bash .

A explicação mais clara está neste artigo muito útil e é exatamente da maneira que eu uso pushde popd:

Primeiro, use dirsou dirs -lpara listar diretórios na pilha e dirs -cpara limpar a pilha.

De certa forma, você marca o local para onde deseja retornar digitando

pushd /home/mike/Pictures/Canon/2012_07_01

e, em seguida, você pode adicionar mais diretórios à pilha, para obter uma lista de diretórios como abaixo, que inclui três pastas designadas e sua ~pasta pessoal:

dirs
~/Downloads/folder/interest ~/Music/artist/album ~ ~/Pictures/Canon/2012_07_01

Na verdade, você não precisa usar popdimediatamente, pois isso remove os diretórios da pilha; a melhor coisa a fazer é pushdgirar a pilha, para que você possa continuar alternando entre os diretórios e ordená-los como desejar. Para saber mais sobre essa rotação útil da pilha, consulte a página de manual do Bash .

Se você tiver exatamente a organização da pilha, como dirsmostra a lista acima , pushd +3alterna para a pasta Imagens específica e a coloca na parte superior da pilha (é +3 e não +4, pois você não conta ~na pilha de diretórios):

pushd +3
~/Pictures/Canon/2012_07_01 ~/Downloads/folder/interest ~/Music/artist/album ~

Então, o prompt diz:

~/Pictures/Canon/2012_07_01$

Você pode continuar fazendo isso sem removê-los da pilha, embora qualquer pasta cdpara a qual você , além daquelas adicionadas à pilha de diretórios pushd, altere sua pilha de diretórios.

Depois de organizar a pilha de diretórios na ordem desejada, você pode usar popdpara percorrer rapidamente os diretórios e retornar à pasta inicial; por exemplo, Picturespodemos retornar para Downloads:

popd
~/Downloads/folder/interest ~/Music/artist/album ~

e o prompt diz

~/Downloads/folder/interest$

Em geral, a vantagem disso é que você pode configurar a pilha de diretórios e a ordem dos itens nela pushde, digamos, que você tem três arquivos para editar em cada um desses diretórios, você pode retornar instantaneamente a cada um popddeles enquanto os remove. da pilha de diretórios. Então, com o seu último, popdvocê retornará a ~. Torna-se particularmente útil quando você possui diretórios particularmente profundos e pode usá-lo para configurar a pilha de diretórios para se mover rapidamente entre eles.

Além disso, esta pergunta contém algumas dicas que você pode achar úteis ao trabalhar na linha de comando:

Comunidade
fonte
2

Embora exista alguma maneira de fazer com que a linha de comando seja mais rápida, eu pessoalmente recomendo usar uma extensão chamada Nautilus nautilus-open-terminal.

Primeiro instale o pacote nautilus-open-terminale adicione suas pastas favoritas aos favoritos com o Nautilus. No Nautilus 3.6. *, Você precisará acessar o menu de roda dentada e selecionar Marcar este local como favorito .

insira a descrição da imagem aqui

Em seguida, use os favoritos do Nautilus para ir mais rápido em seus diretórios favoritos e clique com o botão direito do mouse em um espaço vazio e selecione Abrir no Terminal .

insira a descrição da imagem aqui

Agora você pode ter acesso rápido tanto à linha de comando quanto ao gerenciador de arquivos aos seus diretórios favoritos.

remjg
fonte
O pôster original está tentando trabalhar no terminal e geralmente é mais rápido trabalhar no terminal.
haziz
1
@haziz: Sim, mas as perguntas e respostas do AskUbuntu devem ser úteis não apenas para o OP, mas especialmente para todas as pessoas que encontraram isso na web. Esta é uma resposta valiosa para mim.
Javier Rivera
2

O anc foi projetado exatamente para esse caso de uso.

https://github.com/tobimensch/anc

Aqui está um trecho do arquivo README.md:

# make the current directory the default anchor:
$ anc s

# go to /etc, then /, then /usr/local and then back to the default anchor:
$ cd /etc; cd ..; cd usr/local; anc

# go back to /usr/local :
$ anc b

# add another anchor:
$ anc a $HOME/test

# view the list of anchors (the default one has the asterisk):
$ anc l
(0) /path/to/first/anchor *
(1) /home/usr/test

# jump to the anchor we just added:
# by using its anchor number
$ anc 1
# or by jumping to the last anchor in the list
$ anc -1

# add multiple anchors:
$ anc a $HOME/projects/first $HOME/projects/second $HOME/documents/first

# use text matching to jump to $HOME/projects/first
$ anc pro fir

# use text matching to jump to $HOME/documents/first
$ anc doc fir

# add anchor and jump to it using an absolute path
$ anc /etc
# is the same as
$ anc a /etc; anc -1

# add anchor and jump to it using a relative path
$ anc ./X11 #note that "./" is required for relative paths
# is the same as
$ anc a X11; anc -1

# using wildcards you can add many anchors at once
$ anc a $HOME/projects/*

# use shell completion to see a list of matching anchors
# and select the one you want to jump to directly
$ anc pro[TAB]

Divulgação completa: sou o autor de anc.

Tobi
fonte
1

Você pode colocar um alias no seu arquivo .bashrc (ou no arquivo de configuração do seu shell favorito - eles geralmente estão no seu diretório inicial):

alias cd1="cd directory/directory/my_destination/"

Um link de informações úteis sobre o uso de aliases no bash está aqui .

haziz
fonte
1

Eu criei um conjunto de funções bash para isso e o adicionei ao meu .bash_profile

Roteiro

goto(){
    cd $(getFolders $1)
}

gf(){
    getFolders $1
}

getFolders (){

    local folderList=(
     'alias'
     'Description of alias'
     '/path/to/alias/folder'
     'alias2'
     'Description of alias2'
     '/path/to/alias2/folder'
    )
    local moved="0"
    local count=0

    # Returns the path to the project
    while [ "${folderList[count]}" != "" ]
    do
        if [ "$1" == "${folderList[count]}" ]; then
            echo ${folderList[$(( $count + 2 ))]}
            moved="1"
        fi
        count=$(( $count + 3 ))
    done

    # Returns all project names
    if [ "$moved" != "1" ]; then
        count=0
        while [ "${folderList[count]}" != "" ]
        do
            echoc 6 ${folderList[count]}
            echo - ${folderList[count+1]}
            count=$(( $count + 3 ))
        done
    fi
}

Uso

getFolders

Usando getFolders, você tem uma lista de taquigrafia, descrição e local para cada pasta. Quando você usa getFolders com uma abreviação, ele exibe o local da pasta. Você pode obter uma lista de pastas disponíveis e suas descrições simplesmente chamando getFolders sem um parâmetro

Exemplo de como obter o caminho da pasta

getFolders alias

saídas

/path/to/alias/folder

Exemplo de obtenção de pastas disponíveis.

getFolders

saídas

alias
- Description of alias
alias2
- Description of alias2

gf

gf é um atalho para getFolders

gf alias2

saídas

/path/to/alias2/folder

vamos para

Ir para é uma maneira simples de acessar a pasta selecionada.

goto alias

resultado

o cd foi executado na pasta / path / to / alias /

/ caminho / para / alias / pasta>

Por que ter várias funções

No coração do Unix e Linux, você tem funções reutilizáveis ​​simples que podem ser encadeadas. Prefiro esse método, pois ele não apenas o move para um local selecionado, mas é uma função que, por alias, retorna um caminho. Você pode usar esta função para fazer qualquer coisa a partir desse ponto, como cd até esse caminho.

Michael Warner
fonte
0

Considere definir a CDPATHvariável de ambiente no seu .bashrc ou .bash_profile. O CDPATH assume a mesma forma delimitada por dois pontos que outras PATHvariáveis ​​semelhantes assumem e permite cdusar atalhos para localizar seus diretórios. Por exemplo:

$ mkdir -p /tmp/foo/bar/baz
$ CDPATH='/tmp/foo/bar'
$ cd baz
/tmp/foo/bar/baz
kojiro
fonte
0

você pode configurar seu próprio atalho para um diretório específico. Por exemplo, você deseja ir para o diretório aninhado, geralmente faz

cd / home / dir-1 / dir-2 / dir3 / dir4 / dir5 / dir6 / dir-target

você geralmente usa o comando cd e digita todos os nomes de diretório ou pode pular a digitação (usando o botão TAB), mas ainda leva alguns minutos.

Portanto, para economizar seu tempo, você pode criar um apelido no terminal. Sua tarefa única de configurar o alias.

alias dir-target = '/ home / dir-1 / dir-2 / dir3 / dir4 / dir5 / dir6 / dir-target'

Agora, basta usar o nome alternativo ( dir-target ) para ir para o diretório de destino.

sanjay mundhra
fonte
0

A maneira mais rápida que encontrei é xdum programa "eXchange Directories", escrito por um holandês chamado Frank B. Brokken.

Ele funciona encontrando todos os caminhos no seu sistema de arquivos que podem resolver uma abreviação digitada, por exemplo, ulbpode representar /usr/local/binse essa pasta existe no seu sistema:

% cx ulb
Multiple Solutions:
 1: /usr/lib/binfmt.d/
 2: /usr/local/bin/

Ao pressionar 2, você entra /usr/local/bin.

É um software realmente antigo e não está mais disponível no local original, não há contato com o autor; portanto, para evitar que seja perdido, coloquei no repositório do Github:

https://github.com/mrkafk/exchange_directories

LetMeSOThat4U
fonte
-1

Eu uso o DirB (favoritos do diretório) para fazer isso. Muito agradável! http://www.linuxjournal.com/article/10585

Eu modifiquei o meu para se adequar ao meu gosto e ser mais fácil de usar e mais claro.

fstephens
fonte
Bem-vindo ao Ask Ubuntu! Embora isso possa teoricamente responder à pergunta, seria preferível incluir aqui as partes essenciais da resposta e fornecer o link para referência.
fossfreedom