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).

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 .


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"

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 -

1

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

(cd /some/long/path ; mv myfiel myfile )
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.