Sabemos que usar cd <directory>
abrirá o diretório, se existir!
Além disso, cd ..
nos elevará um nível do diretório de trabalho atual.
Mas, quando temos um diretório aninhado com caminho mais longo /home/thina/teams/td/tech/app/release/apks
, é cansativo apenas ir para a pasta apks
e também é difícil voltar para outro nó, digamos aqui /home/thina/teams
.
Existe alguma maneira de pular a digitação de cd
e cd ..
? Estou usando o Ubuntu 16.04.
command-line
bash
directory
gsthina
fonte
fonte
cd
ecd ..
?cd ../../../../..
CDPATH
variável nosbash
documentos.Respostas:
Existe
pushd
epopd
:Tente
help pushd
ehelp popd
para mais opções. Não háman
página, porquepushd
epopd
são comandos internos do bash.fonte
cd -
faria a mesma coisa?pushd
epopd
pode se lembrar mais de um caminho anterior.dirs
de listar sua pilha de diretórios nos comandospushd
/popd
.help pushd
ehelp popd
você mencionou (bem comohelp dirs
), mas eu pensei que eu ia mencionar que no caso de pessoas estavam perguntando onde estes comandos vêm.help pusdh
Além das respostas muito boas já fornecidas, aqui estão algumas dicas sobre o uso
cd
eficaz.cd -
o levará de volta ao último diretório em que você estava.cd ../../..
o levará a três níveis de uma só vez, você pode usar a..
notação encadeada para 'subir' os diretórios que desejar.cd ..
e use o histórico do bash pressionando a tecla de seta para usar o comando novamente.~
para substituir o diretório inicial dos usuários atuais, se você estiver conectado como o usuário thina,cd ~/teams
levará você para/home/thina/teams
cd
comando, se você digitar parte de um segmento de caminho seguido por Tab, esse segmento será concluído se não houver outra opção válida. Por exemplo, se você tivesse digitadocd /home/thina/teams/td/t
e pressionado Tab, a palavra tecnologia seria preenchida para você, desde que não houvesse outros arquivos ou diretórios no diretório td que iniciassem com a letra t.O uso dessas dicas em conjunto pode dificultar a travessia de diretórios
cd
.fonte
~
, principalmente se você é root, o~user
levará rapidamente aouser
diretório inicial do site.Para subir na árvore vários níveis por vez, você pode usar a seguinte função (graças a muru pela versão aprimorada):
Então você pode fazer:
Além disso:
up
sem um argumento é equivalente aocd ..
devido a${1:-1}
quais substitutos$1
quando definidos e1
caso contráriocd ..
visa preservar ocd -
comportamento usual .fonte
-gt
vez de>
.>
é lexicográfico, ele se compara como strings. Além disso, em vez de criar um caminho, por que não fazercd ..
um loopfor i in $(seq "${1:-1}"); cd ..; done
:? Isso também pode eliminar aif
condição.gt
observação, mas em relação à sua segunda sugestão, veja o marcador final na resposta. Faz sentido para mim.OLDPWD
o caminho original. Aqui está uma versão completa: paste.ubuntu.com/17990874Para nomes de diretório longos, use variáveis com caminho completo. Por exemplo,
Então você pode fazer apenas
cd "$APKS"
Quanto a subir x número de diretórios, tenho essa função definida no meu
.bashrc
Para retornar
/home/thina/teams
deapks
você fariaAqui está um exemplo de uso:
Outra função pequena que eu criei, mas nunca usei tanto, é
bookmark
função.Eis como funciona: ele salva sua pasta atual em algum arquivo e, em seguida, você pode fazer o cd em um diretório específico com base no número da linha nesse arquivo. Exemplo:
E aqui está a própria função:
fonte
UPDATE: Há uma ferramenta ainda mais poderosa do que
autojump
:fasd
, mas eu não estou familiarizado com ele.Estou surpreso que ninguém tenha mencionado
autojump
ainda queÉ basicamente o que o @graipher criou, com algumas opções extras.
Como mencionei em outra pergunta:
Depois de fazer o cd algumas vezes em um diretório (mesmo uma vez basta):
cd /home/thina/teams/td/tech/app/release/apks
você pode usar o atalho
j
para ir para lá rapidamente, independentemente do diretório em que está atualmente:j apks
Observe que o uso de qualquer parte do caminho funciona, desde que seja o mais alto da lista:
j app
também o levará.../apks
se você for lá mais vezes do que para.../app
.Eu o recomendaria, em vez de ter seu próprio script, pois é bem conservado, distribuído para o Ubuntu e possui outros recursos interessantes, como pular para o filho :
Você mudou para
apks
dentrotd
, em vez de outroapks
sob uma árvore diferente.fonte
Apelido
Eu tenho uma lista de diretórios usados com freqüência diretamente disponíveis via alias. Isso também inclui atalhos para os diretórios na hierarquia.
Agora, quando quero subir três níveis, apenas digito
....<Enter>
e aqui estou!fonte
Ative a
autocd
opção (shopt -s autocd
) para não precisar digitarcd
. Por exemplo, você só precisa do comando de dois caracteres..
para ir para o diretório pai.Se você estiver navegando entre dois diretórios, poderá alternar entre eles com
cd -
, que vai para o diretório de trabalho anterior. Aautocd
opção não-
executa a execução,cd -
mas você pode definir um alias ou função para isso.Você pode memorizar diretórios em uma pilha com os componentes internos
pushd
epopd
. O builtindirs
lista a pilha de diretórios (achodirs -v
mais legível).Se você mudar frequentemente para subdiretórios de um diretório específico, e esses subdiretórios tiverem nomes bastante exclusivos, adicione-os à
CDPATH
variável No entanto, esteja avisado de que nunca encontrei uma situação em queCDPATH
fosse realmente útil.Você pode definir uma variável como um nome de diretório e depois alterá-la com
$foo
.O Zsh possui alguns recursos interessantes que o bash não possui. Alguns deles podem ser emulados escrevendo funções que executam o mesmo trabalho. Em particular, a forma de dois argumentos
cd
permite que você mude convenientemente para outro diretório com um nome semelhante, por exemplo/home/thina/teams/td/tech/app/release/apks/com.acme/v1
, from , runningcd release beta
vai para/home/thina/teams/td/tech/app/beta/apks/com.acme/v1
.fonte
Como já respondi a uma pergunta relacionada ao UnixSE, uso um script chamado z [github] para isso.
Ele lembra os diretórios nos quais você toca o CD, classifica-os de acordo com a frequência (frequência + recente) e permite que você mude para um dos caminhos lembrados usando alguma parte do nome.
Depois de ter cdado em um diretório pelo menos uma vez, você pode fazer, por exemplo, em vez de:
Apenas faça:
que funcionará, usando correspondência parcial de nome (supondo que você não tenha outro diretório que contenha em seu caminho o termo sub e que tenha uma frequência mais alta).
Também defini uma função como esta, que primeiro tenta um CD normal e, se isso falhar, usa z:
Isso oferece o melhor de ambos. Se a pasta estiver no diretório atual ou se for fornecido um caminho completo válido, ele apenas cdará lá, mas, caso contrário, tentará encontrar uma correspondência no banco de dados e o cd lá. Isso elimina a (pequena) dor de algumas vezes ter que usar cd (para treinar o banco de dados, ir para uma pasta que você nunca esteve antes) e às vezes lembrar de usar z, quando aplicável.
fonte
cd
de que isso não interfere na forma comoz
cria o banco de dados dos diretórios visitados com freqüência?autojump
?Acho que mais três opções funcionam bem (embora eu possa usar
pushd
mais no futuro , só aprendi sobre isso):Organize seus caminhos para que você não precise
cd
entrar em diretórios profundamente aninhados, ou melhor: para que os locais que você precisa visitar frequentemente estejam ao seu alcance. A maneira de conseguir isso é com links simbólicos : mantenha os diretórios explícitos e bem hierarquizados como estão, mas faça um link de acesso rápido para sua própria conveniência.Então, em vez de digitar o caminho longo para
cd
, basta usarcd ~/apks
ecd ../teams
(ou, nesse exemplo, preferível~/teams
) para voltar.Não use um único shell e CD entre os caminhos, mas mantenha um shell em execução para cada um dos caminhos em que você precisa trabalhar. Existem vários níveis nos quais você pode conseguir essa multitarefa:
tmux
.Basta iniciar uma ação em um comando de uso único que
cd
esteja na pasta, faça uma coisa lá e devolva imediatamente o controle à pasta original: em vez debasta fazer o one-liner
ou equivalente
Não faça
cd
nada , mas simplesmente execute o comando diretamente no seu diretório pessoal. As expansões de cinta podem ajudar muito aqui: em vez devocê pode fazer
fonte
pushd
é muito, muito útil. Você pode adicionar mais informações sobre como usá-lo para melhorar sua resposta.Pushd e Popd
Os comandos
pushd
epopd
são meus favoritos. Opushd
comando lembrará os diretórios que você visitou, visíveis com o comandodirs
e, quando estiver pronto para pular para trás, usepopd
para retornar.Aqui está um exemplo usando funções e aliases do bash:
Eu constantemente uso uma mistura desses comandos de várias maneiras.
Apelido
Outra opção para diretórios acessados com frequência é simplesmente usar o apelido de
cd
oupushd
comandos. Então, usando os exemplos do seu post:Combinação
Combine as duas idéias e você pode até ter isso:
O que lhe dá muita flexibilidade ao percorrer diretórios. Eu mantenho os
cd***
esd***
aliases na mão para coisas comoDesktop
,Documents
,Music
,Downloads
, etc. e é muito útil!fonte
Experimente o z.lua - um novo comando cd que ajuda você a navegar mais rapidamente aprendendo seus hábitos.
cd para um diretório contém foo:
cd para um diretório termina com foo:
use vários argumentos:
Supondo o seguinte banco de dados:
"z in"
entraria/home/user/mail/inbox
como a entrada com maior peso. No entanto, você pode passar vários argumentos para o z.lua para preferir uma entrada diferente. No exemplo acima,"z w in"
o diretório seria alterado para/home/user/work/inbox
.CD com seleção interativa:
Quando houver várias correspondências encontradas, usar
z -i
exibirá uma lista:Depois, você pode inserir o número e escolher para onde ir antes do CD real. por exemplo. introduza 3 no cd para
/home/data/software
. E se você simplesmente pressionar ENTER e não inserir nada, ele simplesmente sairá e permanecerá onde estava.z.lua
também suportafzf
seleção seletiva ou conclusão de argumento:conclusão com fzf
rápido, volte para o pai sem digitar
cd ../../..
:A nova opção
"-b"
pode voltar rapidamente para um diretório pai específico no bash, em vez de digitar "cd ../../ .." de forma redundante:(Sem argumento) :
cd
na raiz do projeto, o projeto enraíza o diretório-pai mais próximo com.git
/.hg
/.svn
.(Um argumento) :
cd
no pai mais próximo, começando com a palavra-chave, se não encontrar, vá para o pai que contém a palavra-chave.(Dois argumentos) : substitua o primeiro valor pelo segundo (no caminho atual).
...
Vamos começar aliasing
z -b
parazb
:Gostaria que pudesse se adequar à sua necessidade.
fonte
O peixe tem várias instalações agradáveis para se mover rapidamente.
Além disso, mantenho meus diretórios favoritos vinculados a ~ / f, para que eu possa cd ~ / f / x para obter ~ / foo / bar / baz / experimental-data.
fonte
Há muito tempo que uso aliases para diretórios acessados com frequência.
Eu também tenho uma função bash chamada ccb (abreviação de create cd bat file - originada no DOS / Windows, onde o script .bat shell ccb.bat criaria outro arquivo .bat para ir para o diretório atual) que cria / acrescenta aliases (no arquivo .bash_aliases) para o diretório atual.
por exemplo: $ ccb myfav criará um alias para o diretório atual com um alias myfav no arquivo .bash_aliases e criará o arquivo .bashrc para que o alias fique imediatamente disponível.
Acabei de encontrar uma nova solução. É uma função bash
isso não precisa aprender nada com o uso anterior. O problema que isso pode não resolver é: se houver mais de 1 diretórios chamados "deep_nested_dir_name" na árvore de subdiretórios, ele passará para o primeiro diretório encontrado pela localização.
Além disso, esta solução não poderá ir para outra árvore de diretórios.
entre aliases codificados e aliases gerados e essa nova função lj (), a maioria das minhas necessidades é atendida.
Aqui está minha função bash ccb () para quem quiser usá-la
fonte