Gostaria de alternar frequentemente entre diretórios que estão em caminhos totalmente independentes, por exemplo, /Project/Warnest/docs/
e ~/Dropbox/Projects/ds/test/
.
Mas não quero digitar cd /[full-path]/
o tempo todo. Existem comandos de atalho para mudar para diretórios trabalhados anteriormente?
Uma solução em que pude pensar é adicionar variáveis de ambiente ao meu bash
.profile
para os diretórios usados com freqüência e cd
a eles usando essas variáveis.
Mas existe alguma outra solução para isso?
bash
shell
command-line
alias
cd-command
saiy2k
fonte
fonte
Respostas:
Se você está apenas alternando entre dois diretórios, pode usar
cd -
para ir e voltar.fonte
Há uma variável de shell
CDPATH
embash
eksh
ecdpath
emzsh
:Então você pode definir em seu ~ / .bashrc:
Em seguida,
cd docs
ecd test
vai levá-lo para o primeiro encontrado tal diretório. (Quero dizer, mesmo que um diretório com o mesmo nome exista no diretório atual,CDPATH
ainda será consultado. Se houverCDPATH
mais diretórios com subdiretórios com o nome, o primeiro será usado.)fonte
$CDPATH
seja.
(uma entrada explícita, ou seja,:
também funciona). Caso contrário, você terminará com o comportamento estranho, em que osCDPATH
dirs têm precedência sobre os diretórios no diretório de trabalho atual, o que provavelmente não deseja.export
. Dessa forma,CDPATH
não é exportado para scripts com efeitos potencialmente estranhos ou prejudiciais. Veja aqui para mais discussões e exemplos.cd
refere-se a ele.Outra coisa que você pode tentar é uma ferramenta chamada autojump . Ele mantém um banco de dados de chamadas para seu alias (
j
por padrão) e tenta tomar decisões inteligentes sobre onde você deseja ir. Por exemplo, se você digitar com freqüência:Você pode usar o seguinte para chegar lá em uma pitada:
Está disponível no Debian e no Ubuntu e está incluído por usuário
~/.bashrc
ou~/.zshrc
por padrão.fonte
cd -
seja útil saber se você ainda não o conhece, acho que essa é uma solução muito melhor do que a principal resposta atual.apt-get install autojump
no Ubuntu, mas também para muitos outros, conforme documentado em sua página) para instalação em todo o sistema, mas cada usuário precisa carregá-lo em seu ambiente shell para que possa substituir o cd para acompanhar onde você está indosource /usr/share/autojump/autojump.sh
deve ser adicionado ao ~ / .bashrc para que o autojump funcione .Se for um número pequeno de diretórios, você pode usar
pushd
para alternar entre eles:ao contrário
cd -
, você pode usar isso com mais de dois diretóriosSeguindo a sugestão de Noach, agora estou usando isso:
exemplo de uso:
etc. Obviamente, isso é apenas para rodar na pilha e não suporta a adição de novos caminhos - talvez eu deva renomeá-lo.
fonte
pushd
epopd
para passagem, mas não que pushd poderia girar o que tem sido utilizado até agora ...Eu uso
alias
no bashrc para fazer esses CDs.tal como:
fonte
~/.bashrc
ou/etc/bash.bashrc
. Eu não uso.profile
antes, então não sei a relação entre eles :-(.bash_profile
e ele funciona muito bem .. thx :)Encontrei um script (normalmente chamado acd_funch.sh) que resolveu esse problema para mim. Com isso, você pode digitar
cd --
para ver os últimos 10 diretórios que você usou. Será algo como isto:Para ir
~/Music/thirddir
apenas digitarcd -2
Referências
NOTA: Este script foi publicado originalmente em um artigo da gazeta do linux que está disponível aqui: acd_func.sh - estende o CD do bash para manter, exibir e acessar o histórico dos nomes de diretórios visitados .
fonte
Experimente a
cdable_vars
opção de shell no bash. Você liga comshopt -s cdable_vars
.Então você precisa definir suas variáveis
export dir1=/some/path
. ecd dir1
, finalmente , etc. Você pode colocá-lo no seu~/.bashrc
para que ele grude.fonte
Use "pushd -n " (assumindo que você use o bash).
Adicione ao seu ~ / .bashrc:
então,
cd ~
é sua casacd ~1
é~/Dropbox/Projects/ds/test/
cd ~2
é/Project/Warnest/docs/
Você pode usar
~1
,~2
etc, exatamente da mesma maneira que~
.fonte
Há muitas boas sugestões aqui. Qual usar dependerá se você tem uma pequena lista fixa de diretórios entre os quais alterna ou se está procurando uma solução mais genérica.
Se for uma pequena lista fixa, configurar aliases simples (como Felix Yan sugeriu) seria mais fácil de usar.
Se você está procurando uma solução mais generalizada (ou seja, muitos diretórios diferentes, mudando com o tempo), eu usaria pushd e popd (como sugerido por Useless). Pessoalmente, acho difícil usar o pushd / popd padrão, especialmente quando você começa a alternar entre várias pastas; no entanto, escrevi alguns ajustes que tornam muito mais fácil para mim. Adicione o seguinte ao seu bashrc:
pd
(como uma forma mais curta depushd
) para pular para uma nova pasta, lembrando onde você estava.dirs
para ver a lista de diretórios salvos.pd 3
para pular para o diretório número 3.Exemplo de uso:
fonte
O seguinte pareceu funcionar no único caso em que o testei e você pode simplesmente soltar os nomes de diretório como links simbólicos em ~ / Bookmarks:
fonte
function
linha entra no seu .bashrc (você pode digitá-lo no seu terminal para testar, mas desaparecerá quando você fechar essa janela), as linhas antes de configurar o caso de teste de "testdir" se tornando um nome/tmp
e o última linha é o teste para ver se funciona.Você poderia fazer pior do que tentar j2 .
No README:
Eu o uso extensivamente e recomendo.
fonte
Eu aconselho usar o zsh , esse shell como uma conclusão muito boa do TAB para diretórios, arquivos e até opções para a maioria dos programas CLI.
Eu uso esse shell há anos e perdi a funcionalidade se ela desaparecesse. Criar scripts para o zsh também é muito divertido, com um grande número de one-liners que podem ajudá-lo todos os dias.
fonte
Na minha experiência, a maior aceleração na navegação em um shell é usar sua funcionalidade de pesquisa de histórico. No Bash, você pode pesquisar para trás no seu histórico de comandos pressionando
Ctrl
+R
e digitando algum padrão. Esse padrão é comparado com entradas anteriores no seu histórico - sejamcd
comandos ou outras operações - e sugestões são feitas enquanto você digita. Basta pressionar enter para executar o comando sugerido novamente. Isso é chamadoreverse-search-history
no Bash e eu adoro isso. Isso economiza muitas teclas e poupa minha memória interna.É uma coisa boa porque você só precisa se lembrar de uma parte menor de um comando, como
Drop
ouWa
para distinguir entre as duas entradas do históricocd ~/Dropbox/Projects/ds/test/
ecd /Project/Warnest/docs/
.fonte
Eu também uso esses aliases (adicione-os a ~ / .bashrc):
É muito mais rápido ir para o diretório superior com eles (mas apenas resolve metade da navegação).
fonte
se você estiver usando zsh:
você não precisa digitar
cd
, basta digitar o caminho do diretório (/foo/bar/baz<Enter>
igual acd /foo/bar/baz<Enter>
)requer que a
auto_cd
opção seja definidaTab
tecla (/u/sh/pi<Tab>
expande para/usr/share/pixmaps
; funciona também para nomes de arquivos)fonte
shopt -s autocd
, por isso não é mais um benefício apenas para o zsh.Existe uma ferramenta bastante agradável para alterações rápidas de diretório:
xd - Trocador de diretório eXtra fast http://xd-home.sourceforge.net/xdman.html
um pouco estranho é que você precisa mapeá-lo no perfil bash ou similar, pois ele apenas gera o diretório
você pode fazer coisas como:
fonte
f() { cd "$(xd -g "$@")"; }
para manipular adequadamente diretórios e espaços espaçados nos argumentos paraxd
(você provavelmente não precisa do caminho). Se você nunca usarxd
de outra maneira, poderá fazer alternativamentexd() { cd "$(command xd -g "$@")"; }
(alternativamente, usar/usr/bin/xd
no lugar decommand xd
- você sempre pode executarcommand xd …
se precisar ignorá-lo).Você nunca deve digitar o caminho completo no shell de qualquer maneira. Você sempre pode usar:
ao invés de
fonte
P*
menos que o Project seja o único arquivo que começa com P. A conclusão da guia pode alternar (por padrão, na maioria dos shells; você precisa religar a guiamenu-complete
no bash) e resolver instantaneamente em casos simples assim, não há espera por isso/P*/W*/*/mydoc*
parece que funcionaria bem até que um dia você criou outro arquivo que corresponde a essa glob e de repente você termina abrir ambos de uma só vez./u*/*/g++
é impressionantemente poucos caracteres, mas espero que nada mais em nenhuma das subpastas de nenhuma das minhas pastas raiz iniciadas comu
seja nomeadog++
. (Como um bom compromisso, em algumas conchas você pode usar a guia para expandir os globos no local à medida que avança)Também existe
OLDPWD
uma variável de ambiente que, de acordo com a IEEE 1003.1 (POSIX), deve ser atualizada com o diretório ativo anterior sempre quecd
mudar o diretório ativo (para os curiosos, linha 80244 da página 2506 da IEEE 1003.1-2008).fonte
Há também um aplicativo "wcd" criado especificamente para isso (também portado para o cygwin, já que estou nisso). Você pode criar atalhos, favoritos de diretórios com ele. Também suporta curingas. A leitura da página de manual e dos documentos em / usr / share / wcd deve ajudar bastante.
http://manpages.ubuntu.com/manpages/hardy/man7/wcd.7.html
fonte
cdargs é a ferramenta mais eficiente para marcar um diretório como favorito: http://www.youtube.com/watch?v=uWB2FIQlzZg
fonte
sudo apt-get cdargs
no ubuntu. BTW, o vídeo do youtube é muito ruim, mas a ferramenta é ótima.Experimente o fastcd ( https://github.com/frazenshtein/fastcd ) Ele define o gancho que registra os diretórios visitados do bash. E define o script como alias "j", que mostra os últimos diretórios visitados, com a capacidade de fazer o cd rapidamente (comece a digitar para filtrar os diretórios). A modificação de .bashrc é necessária para criar o alias "j".
Obtendo a ferramenta
Instale os módulos necessários
Crie o arquivo set.sh no seu bashrc
E atualizar o bashrc
Em seguida, basta digitar "j" no console
fonte
.bashrc
?Eu tive a mesma pergunta e encontrei esta resposta pela primeira vez . Instalei o utilitário z ( https://github.com/rupa/z ).
Este é exatamente o que você procura, porque z aprende com seus comandos cd, e mantém o controle dos diretórios de acordo com o frecency princípio (frequente e recente). Então, depois de executar os dois comandos cd uma vez, você pode executar algo como:
para pular para
/Project/Warnest/docs/
e~/Dropbox/Projects/ds/test/
respectivamente. Os argumentos para z são expressões regulares, portanto, você nem precisa digitar um nome de pasta completo.fonte
Atualização (2016): Agora uso o FASD para isso, o que permite a pesquisa difusa com base nos seus diretórios mais recentes.
Eu criei uma ferramenta para isso, em Ruby. Ele permite que você use arquivos YAML para declarar seus projetos.
Eu escrevi um pequeno artigo sobre isso aqui: http://jrnv.nl/switching-projects-terminal-quickly/
Também publiquei a fonte no GitHub: https://github.com/jeroenvisser101/project-switcher
fonte
Eu tenho usado meu próprio utilitário cdhist para gerenciar isso por muitos anos. Alias seu comando cd e automaticamente mantém uma pilha de diretórios.
fonte
Você pode usar
export
para atribuir os caminhos do diretório a variáveis e depois referenciá-las.fonte
export
declarações na sua~/.bashrc
e elas sempre estarão disponíveis.Algumas sugestões aqui:
Ideia mais direta, adicionarei o alias no arquivo .profile
Então use
$ dir1
oudir2
, pode cdSe você estiver sempre alternando apenas em dois diretórios. usando
cd -
alternará entre eles.fonte
A solução que eu uso para essa situação é
screen
. Tela inicial, crie uma janela para cada diretórioC-a c
e navegue até lá. Alterne entre janelas / diretórios comC-a n
ouC-a p
. Nomeie as janelas comC-a A
. Em seguida, você pode exibir uma lista de suas janelasC-a "
e navegar usando o número ou o nome da janela. Como éscreen
, você pode se desconectar da sessão, economizando seu espaço de trabalho e reconectá-lo posteriormente com a mesma configuração.fonte
Parece que você precisa basicamente de um arquivo de projeto para o seu fluxo de trabalho. Com diretórios que pertencem à sua atividade, como em um IDE de programação. Tente Zsh Navigation Tools e a ferramenta
n-cd
lá. Isso permitirá que você navegue pelas últimas pastas visitadas e também defina umHotlist
com os diretórios de sua escolha:n-cd
pode ser associado a uma combinação de teclas com:fonte
TL; DR
Fish
para shell interativo que capacitá-lo imediatamente (fish
>zsh
>bash
).POSIX
/Bash
para execução de scripts que é a sintaxe mais amplamente suportado (POSIX
>Bash
>Zsh
>Fish
).Cartuchos
Depois de testar diferentes shells, aqui está o meu feedback (em ordem de teste / adoção):
Bash
:Zsh
+oh-my-zsh
:cd /e/x1
→cd /etc/X11/
);Fish
+oh-my-fish
(atual) é o melhor pronto para uso:Use aliases significativos
Cada shell pode ser expandido usando
function
ealias
, aqui estão os que eu utilizo relacionados ao seu problema (compatível com POSIX):Existem coisas básicas, mas realmente significativas, fáceis de lembrar e de preenchimento automático.
Conheça o seu shell
Configure
CDPATH
para adicionar os diretórios mais usados (por exemplo~/projects/
,/etc/init.d/
) para que você possa pular rapidamente para eles.Veja resposta de manatwork para mais detalhes sobre mroe
CDPATH
.Hangout e leitura
fonte
exit
, você sai do shell interativo. Esses "aliases significativos" poderiam seralias back='cd -'
ealias up='cd ..'
- mas não se preocupe, esses comandos nunca retornarão falsos (nenhum diretório anterior? Envia você para casa! Já está na raiz? É um não-operacional!) E, portanto, você nunca sai . Considere tambémalias back='cd $OLDPWD'
(observe as aspas simples), pois ele não terá saída (cd -
informa para onde está enviando, o que provavelmente não é necessário, pois o prompt contém essas informações)anc
é uma ferramenta de linha cmd (abreviação de anchor), que mantém os favoritos dos diretórios. (até agora testado apenas com o bash)No seu caso:
isso adiciona os dois diretórios à lista âncora (pense nos favoritos)
Agora, se você quiser pular para
/Project/Warnest/docs/
qualquer lugar no seu sistema, digite:e se você quiser pular para
~/Dropbox/Projects/ds/test/
digitar:Além de combinar o texto com os caminhos marcados, o anc tem muitas outras maneiras convenientes de navegar pelos diretórios.
inicia o modo interativo, que lista todos os favoritos por número, então tudo que você precisa digitar é o número
Se você digitar:
uma lista que corresponde a todos os favoritos (no seu caso, ambos os favoritos) é exibida e você pode selecionar usando as teclas de seta. Essa é uma maneira muito rápida e intuitiva.
Obtenha anc na página do github do projeto: https://github.com/tobimensch/anc
Há também um README com exemplo de uso.
Divulgação completa: sou o autor deste script. Espero que algumas pessoas achem útil.
fonte