Atalhos de linha de comando para alterar o diretório [duplicado]

6

Eu estou procurando uma maneira fácil de navegar para diretórios que abrangem vários discos rígidos e deseja definir algo equivalente a um atalho no terminal.

No Windows, eu realizaria isso com mklink e criaria links simbólicos para ir para o diretório ou junções para anexar o local ao final do caminho atual do arquivo.

Como isso é apenas sobre navegação, também não precisa ser um link ou algo assim, talvez haja alguma variável ambiental que eu possa definir para que eu possa cd $myDir (preferível).

É possível, ou eu realmente preciso aprender meus diretórios melhor?

    
por user1695505 27.12.2014 / 18:57

4 respostas

10

Familiarizar-se com o layout do seu sistema de arquivos faz parte de se tornar um usuário competente - sempre que você gasta com esse objetivo em mente, não é perda de tempo. No entanto, com isso dito, você pode realmente facilitar a movimentação pelo sistema de arquivos. Observe que no Linux / UNIX, o sistema de arquivos é apresentado como uma única árvore, independentemente de quantos dispositivos compõem seu armazenamento, ao contrário do Windows, onde cada "unidade" (física ou lógica, dependendo da sua configuração) é representada. configuração padrão, por uma árvore independente.

Existem várias maneiras de abordar esse problema. É certamente possível configurar um monte de variáveis de shell que apontam para um diretório diferente. Emitir cd $SomeDir fará com que o shell expanda a variável $SomeDir e a substitua na linha de comando para que, quando for finalmente executada, cd receba o nome do diretório armazenado na variável. Esta é provavelmente a abordagem mais simples, e se você preencher suas variáveis de shell com caminhos absolutos, ela deve funcionar de qualquer lugar no sistema de arquivos.

Você também pode usar links simbólicos para os diretórios de destino (links físicos para diretórios não são suportados na maioria dos UNIXs). No entanto, para que isso seja eficaz, você ainda precisa fornecer informações suficientes no argumento path para permitir que o kernel resolva o symlink. Ou seja, você precisaria fornecer o caminho absoluto para o symlink, ou o suficiente de um caminho relativo para permitir que o kernel encontrasse o link, para que ele pudesse segui-lo.

Uma outra abordagem, que pode ou não estar disponível, dependendo do seu shell, é usar o recurso cdpath do shell. Isso é suportado em bash , zsh , tcsh e indubitavelmente outros. Com essa técnica, você define a variável de ambiente CDPATH para uma lista de nomes de diretório separados por dois-pontos, que é pesquisada quando você executa cd . Se um dos diretórios em $CDPATH contiver um subdiretório cujo nome corresponde ao passado para cd , o shell alterará seu diretório de trabalho atual. Por exemplo, se CDPATH contiver /usr/local e se o seu sistema tiver um diretório /usr/local/www , a emissão de cd www procurará o conteúdo de $CDPATH , tente localizar um subirectory de /usr/local chamado www e, se existir, alterará seu diretório de trabalho atual para /usr/local/www . Observe que o shell pesquisa os diretórios em $CDPATH na ordem em que são especificados, portanto, se $CDPATH contiver vários diretórios que contenham o subdiretório que você passa como argumento para cd , o primeiro jogo vencerá . Isso me pegou muitas vezes o suficiente para que eu não mais usássemos cdpath .

    
por 27.12.2014 / 19:43
4

Você pode configurar apenas um alias, como:

$ alias abc="cd /home/user/Desktop/Folder"

Para armazená-los a longo prazo, adicione-os ao seu arquivo .bashrc.

Isso funcionará se for apenas a navegação que você está procurando - no entanto, o 'abc' acima não será útil se você quiser criar scripts.

Pessoalmente, acho que pode ser fácil, a longo prazo, aprender e lembrar [as partes relevantes] da estrutura do seu diretório. Muitos aliases apenas lhe dão mais coisas para lembrar, e eles não funcionam em computadores diferentes que você pode ter que usar a tempo.

    
por 27.12.2014 / 19:56
4

Eu gostaria de recomendar o utilitário z - link (que é inspirado por outro utilitário chamado j ).

O que z faz é sobrepor a função cd do seu shell para adicionar um efeito colateral de registrar todos os diretórios que você visita. Esses diretórios são armazenados no arquivo ~/.z em uma ordem decrescente de "frecency", de modo que um diretório aparecesse mais alto se fosse acessado mais vezes e mais recentemente.

Depois de usar cd por algum tempo para criar esse índice, você poderá usar o novo comando z $DIR para ir para o diretório que contém a subcadeia $DIR , que aparece mais alto em ~/.z . / p>     

por 28.12.2014 / 03:09
0

Existe $CDPATH :

mkdir -p ./1/2/3/4/dir ./3/2/1/dir ./12/dir
CDPATH=":$HOME/1/2/3/4:$HOME/3/2/1:$HOME/12:"
cd dir

Se você colocar uma lista de caminhos de hub visitados com freqüência em seu valor, poderá usar cd para qualquer um de seus caminhos filhos sem especificar o caminho completo. cd colocará você na primeira partida que encontrar. E ele imprimirá sua localização em stdout quando ocorrer:

OUTPUT:

/home/mikeserv/1/2/3/4/dir

Os valores são : delimitados por cólon - assim como $PATH - portanto, se você tiver nomes malucos, poderá ter problemas. Mas isso pode ser muito útil. E é POSIX especificado - deve funcionar em qualquer shell moderno, espero:

 cd ..; rm -rf dir; cd dir

OUTPUT:

/home/mikeserv/3/2/1/dir

Certifique-se de abrir seu valor com : dois pontos - na maioria dos shells é $CDPATH que permite cd para um diretório filho do diretório atual sem um ./ - isso é o que o levando : null-field denota.

É por esta razão que você não precisa se preocupar com isso, colocando você se você não quer ir - se você fizer usar um caminho qualificado (basicamente qualquer arg para cd que começa com . ou / ) cd não o interpreta.

    
por 27.12.2014 / 23:56