Como renomear um arquivo dentro de uma pasta usando um comando shell?

8

Eu tenho um arquivo em some/long/path/to/file/myfiel.txt.

Eu quero renomeá-lo para some/long/path/to/file/myfile.txt.

Atualmente eu faço isso mv some/long/path/to/file/myfiel.txt some/long/path/to/file/myfile.txt, mas digitar o caminho duas vezes não é muito eficaz (mesmo com a conclusão da guia).

Como posso fazer isso mais rápido? (Acho que posso escrever uma função para alterar apenas o segmento do nome do arquivo, mas esse é o plano B).

Leonid Shevtsov
fonte

Respostas:

11

Para fazer isso em um único comando, você pode simplesmente fazer o seguinte:

mv some/long/path/to/file/{myfiel.txt,myfile.txt}

Que é um exemplo para o nome completo do arquivo, já que é um erro de digitação, você pode fazer algo como:

mv some/long/path/to/file/myfi{el,le}.txt

Ambos serão expandidos para o comando completo, chamados expansões de chaves . Eles são suportados pelo zsh .

Tamara Wijsman
fonte
Oh meu Deus, isso abre muitas possibilidades. Obrigado!
Leonid Shevtsov
5

Aqui estão várias opções:

Mude para o diretório:

cd /home/long/path
mv file1 file2
cd -

Altere os diretórios usando a pilha de diretórios:

pushd /some/long/path
mv file1 file2
popd

Mude para o diretório usando um subshell:

( 
  cd /some/long/path
  mv file1 file2
)   # no need to change back

Use expansão de chave:

mv /some/long/path/{file1,file2}

Use uma variável:

D=/some/long/path
mv "$D/file1" "$D/file2"
tylerl
fonte
Lembre-se de que a última abordagem é interrompida quando o caminho tem um espaço, aponte-o.
slhck
@slhck TODAS as abordagens quebram se você tiver espaços.
tylerl
11
Não, se você os digitar corretamente, eles não serão. Apenas a variável quando expandido será parecido com múltiplos argumentos para mv
slhck
@slhck lá vai você.
tylerl
3

Mude para o diretório, mova o arquivo e volte para o diretório anterior; igual a:

cd some/long/path/to/file
mv myfiel.txt myfile.txt
cd -
Yedric
fonte
1

Quando eu uso o método subshell, tenderia a fazê-lo em uma linha como essa

(cd /some/long/path ; mv myfiel myfile )
Keith Wolters
fonte