Capacidade de alternar facilmente entre diretórios em diferentes áreas [duplicado]

6

Desculpe se isso é realmente básico, novo em trabalhar com * nix.

Então, estou fazendo algo em que estou freqüentemente mudando entre dois diretórios distantes um do outro na árvore de arquivos do sistema.

Existe uma maneira de atribuir um nome abreviado a cada um para uso com o comando cd , para que eu possa digitar cd directoryA e cd directoryB , por exemplo, em vez de digitar repetidamente cd C:/A/Really/Long/File/Path/Name/Makes/My/Fingers/Hurt ?

    
por Bassinator 29.03.2017 / 19:43

11 respostas

8

Is there anyway I can assign some kind of short name to each one

Sim, claro, com o comando alias :

alias directoryA='cd /path/to/directoryA'

Em seguida, use directoryA como um alias para o comando cd . É realmente assim tão simples;)

    
por 29.03.2017 / 20:01
10

Para exatamente dois diretórios, use cd -

$ cd /tmp
$ cd /var/tmp
$ cd -
/tmp
$ cd -
/var/tmp
$ cd -
/tmp
$ 
    
por 29.03.2017 / 19:48
4

Eu usaria variáveis de shell:

da=/really/long/path/to/directory/a
db=/other/really/long/path/to/directory/b

cd $da
cd $db

A vantagem deste método é que você pode usar $ da e $ db no lugar dos caminhos de arquivo em qualquer comando, por exemplo:

cp $da/file1 $db/file2
    
por 30.03.2017 / 02:20
3

Use um shell diferente do Bash para trabalhos interativos. Eu uso o Fish shell que me permite digitar

$ cd /u/sh/sounds

e depois pressione Tab . Depois a linha de comando lê

$ cd /usr/share/sounds/

Não é necessário definir nenhum alias, basta escrever o suficiente para que ele se torne exclusivo.

    
por 29.03.2017 / 21:45
2

Você pode dar a um diretório (ou qualquer arquivo) um nome abreviado criando um link simbólico . Um simbólico é uma entrada de diretório que na verdade não contém nenhum dado, mas aponta para outro caminho onde os dados reais devem ser encontrados. Operar na entrada de diretório (por exemplo, criar, renomear, excluir) manipula o link simbólico, enquanto opera no conteúdo (por exemplo, ler, escrever, cd e ls para um diretório, etc.) opera no destino do link . Por exemplo, crie um link simbólico com o ln command :

ln -s /A/Really/Long/File/Path/Name/Makes/My/Fingers/Hurt ~/hurt

Em seguida, cd ~/hurt é principalmente equivalente a /A/Really/Long/File/Path/Name/Makes/My/Fingers/Hurt . É principalmente equivalente porque o shell lembra e exibe ~/hurt como o diretório de trabalho atual; se você quiser que o shell esqueça o link simbólico, use cd -P ~/hurt .

Se você costuma mudar para subdiretórios de um diretório específico, pode usar o % variávelCDPATH . Quando você executa cd com um caminho relativo (ou seja, um argumento que não inicia com / , seja explicitamente ou por meio de uma abreviação como ~ ou uma variável cujo valor começa com / ), o shell tenta para alterar para um subdiretório de cada elemento de CDPATH , por sua vez, até encontrar um que exista. Se você usa CDPATH , é altamente recomendável colocar . (o diretório atual) primeiro, caso contrário, um cd subdir de aparência inocente pode fazer você pular para um local completamente não relacionado.

CDPATH=.:/A/Really/Long/File/Path/Name/Makes/My
cd Fingers/Hurt

Você também pode definir abreviações dentro do shell como variáveis. Use $ na frente do nome da variável para usar seu valor. Observe que, se o valor da variável contiver caracteres especiais, como espaços, você precisará de aspas duplas ao usá-lo (a menos que você use zsh ou fish como seu shell).

hurt=/A/Really/Long/File/Path/Name/Makes/My/Fingers/Hurt
cd $hurt
spaced='/A/Really Long/File Path Name/Makes My Fingers/Hurt'
cd "$spaced"

No bash a opção cdable_vars torna isso mais fácil nos dedos .

Se um componente no caminho for longo, use a conclusão. Se a sua tecla Tab não estiver gasta, você está fazendo errado. Para obter melhores resultados, evite ter muitos nomes de arquivo que tenham algumas letras em comum no início e evite iniciar nomes de arquivo com caracteres difíceis de digitar, como letras maiúsculas.

    
por 30.03.2017 / 01:32
1

No bash, você pode usar a opção cdable_vars shell para fazer algo semelhante:

$ mkdir -p /tmp/a/b/c/d/e/f/g/h
$ mkdir -p /tmp/i/j/k/k/l/m/n/o
$ h=/tmp/a/b/c/d/e/f/g/h
$ o=/tmp/i/j/k/k/l/m/n/o
$ shopt -s cdable_vars
$ cd /tmp
$ cd h
$ pwd
/tmp/a/b/c/d/e/f/g/h
$ cd o
$ pwd
/tmp/i/j/k/k/l/m/n/o
    
por 29.03.2017 / 21:11
1

Você pode instalar o autojump .

para que você possa digitar " j directoryA<enter> " ou " j dire<tab> " para selecionar em vários diretórios.

    
por 30.03.2017 / 03:36
1

Use Apparix . Ele permite que você defina marcadores para seus diretórios. Então, saltar para lá e para cá entre eles, uma vez configurado, é tão fácil quanto

to foo
# Goes to /this/is/a/complex/path/for/foo

to bar
# Goes to /a/completely/unrelated/path/for/bar

to foo subdir
# Goes to /this/is/a/complex/path/for/foo/subdir

Etc. E todos os atalhos e subdiretórios são preenchidos automaticamente.

É uma ferramenta imensamente poderosa e altamente subestimada. Eu acho que ele funciona melhor do que alternativas como o autojump porque dá ao usuário mais controle.

    
por 30.03.2017 / 11:29
1

Se você estiver apenas se movendo diretamente entre dois diretórios, cd - o levará para o último diretório de trabalho.

    
por 30.03.2017 / 13:43
0

pushd é o comando bash para essa finalidade.

Leia a seção sobre como usá-lo em man bash para saber como funciona.

    
por 30.03.2017 / 03:48
0

Não sei sobre o bash (não o uso se puder evitar fazê-lo), mas em tcsh & outras conchas, você poderia simplesmente usar o mecanismo de histórico. Então você digitaria, e. "cd /" e ctl-UpArrow para rolar através de todos os comandos para cd para os caminhos que começam na raiz.

Observe que isso funciona para qualquer comando, não apenas para cd. Você só precisa dos primeiros caracteres de qualquer coisa que você queira rolar de volta para.

    
por 30.03.2017 / 06:25