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 por 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 tabulação).

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

    
por Leonid Shevtsov 12.10.2012 / 17:33

4 respostas

11

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

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 que você pode fazer assim:

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

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

    
por 12.10.2012 / 17:43
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 a expansão de chaves:

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

Use uma variável:

D=/some/long/path
mv "$D/file1" "$D/file2"
    
por 12.10.2012 / 17:54
3

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

cd some/long/path/to/file
mv myfiel.txt myfile.txt
cd -
    
por 12.10.2012 / 17:38
1

Quando eu uso o método subshell, eu costumava fazer isso em uma linha, assim

(cd /some/long/path ; mv myfiel myfile )
    
por 12.10.2012 / 20:27

Tags