Linux: renomeia o arquivo / dir em sua localização atual sem alterar o pwd para esse local?

3

Na linha de comando, digamos que meu pwd é algo como:

/home/whatever

E há um arquivo em algum diretório profundo que desejo renomear. Normalmente eu faria isso:

# mv /var/some/deep/folder/structure/fileA /var/some/deep/folder/structure/fileB

Qual é a pergunta, há algum truque de linha de comando para renomear um arquivo / diretório sem ter que digitar toda a estrutura do diretório novamente? Algo como:

# mv /var/some/deep/folder/structure/fileA fileB

O problema com esse comando é que ele move fileA para seu pwd . Obviamente, quero mantê-lo no mesmo local e simplesmente renomeá-lo. Então, como eu disse, há algum truque para conseguir isso sem ter que digitar toda a estrutura de diretórios novamente? É simplesmente uma questão de curiosidade e preguiça.

    
por Jake Wilson 24.01.2012 / 10:04

3 respostas

10

Depende do seu shell. Em zsh você pode:

mv /var/some/deep/folder/structure/{fileA,fileB}

Se você estiver usando o bash, considere migrar para o zsh - é um processo bastante simples e tenho certeza que você vai adorar o zsh. :)

Editar :

Parece funcionar em bash, veja o comentário de Lunar_Lamp.

    
por 24.01.2012 / 10:23
4

Existem pelo menos três truques para eliminar a digitação repetitiva.

... e todos eles trabalham no shell Bourne-Again, no shell Korn e no shell Z.

  • Use as variáveis do shell:
    dir=/var/some/deep/folder/structure
    mv "${dir}"/fileA mv "${dir}"/fileB
  • Use a expansão de chaves:
    mv /var/some/deep/folder/structure/{fileA,fileB}
  • Use um subshell:
    (cd /var/some/deep/folder/structure/ && mv fileA fileB)

Outros truques de redução de digitação incluem mais truques específicos de shell, como funções e aliases, e truques de shell neutro, como usando os recursos de copiar e colar do emulador de terminal . ☺

    
por 24.01.2012 / 13:44
1

Embora possa haver atalhos mais eficientes, esses seriam os dois métodos que eu usaria com frequência:

aa=/var/some/deep/folder/structure/
mv "$aa"fileA "$aa"fileB

Ou

cd /var/some/deep/folder/structure
mv fileA fileB
cd -

Agora, obviamente, eles não são as soluções eficientes que você procura, mas ambos podem (na minha opinião) ser mais rápidos do que digitar o caminho completo a cada vez.

    
por 24.01.2012 / 10:15