A forma mais rápida de renomear arquivos, sem digitar novamente o caminho do diretório

50

Eu sei como renomear arquivos no Unix:

$ mv ~/folder/subfolder/file.txt ~/folder/subfolder/file.sh

     ^-------this part------^    ^------this part-------^

Demora muito tempo para repetir ~/folder/subfolder/file duas vezes.

Existe uma maneira mais rápida?

    
por Hamed Kamrava 27.05.2014 / 18:08

6 respostas

96

Se o seu shell é compatível Brace Expansão (funciona com csh , tcsh , ksh , zsh , bash , mksh , lksh , pdksh , yash com brace-expand ativado chamando yash --brace-expand ou definido no shell interativo com set -o brace-expand ou fish ):

mv ~/folder/subfolder/file.{txt,sh}
    
por 27.05.2014 / 18:12
19

Você também pode usar rename (parte do pacote util-linux).

rename .txt .sh ~/folder/subfolder/file.txt

Consulte a página de renomear man para obter mais detalhes.

    
por 27.05.2014 / 18:24
10

Todos os itens acima são bons. Isso também funcionaria:

( cd ~/folder/subfolder && mv file.txt file.sh )
    
por 27.05.2014 / 18:31
5

Não. Você precisa fornecer o caminho completo para o arquivo para renomeá-lo. A única alternativa é mover para a pasta de destino antes de executar o mv :

cd ~/folder/subfolder/
mv file.txt file.sh

Como alternativa, você pode escrever uma pequena função que renomeie o arquivo no diretório de destino. Por exemplo, adicione essas linhas ao seu arquivo de inicialização do shell ( ~/.bashrc se você estiver usando bash ):

lmv(){
    _path=$(dirname -- "$1")
    _target="${_path%/}/$2"
    mv -- "$1" "$_target"
}

Em seguida, abra um novo terminal ou apenas execute source ~/.bashrc para reler o arquivo init e você pode fazer isso:

lmv ~/folder/subfolder/file.txt file.sh
    
por 27.05.2014 / 18:12
1

Sim. Se você usa bash , você faz sudo pushd ~/folder/subfolder/ && sudo mv ./file.txt ./file.sh && popd .

O que é realmente maior e pode falhar se você perder as permissões de acesso ao diretório original quando você fez o popd .

    
por 27.05.2014 / 18:13
1

Apenas para expandir a utilidade da resposta do cuonglm (NÃO aceitar qualquer crédito como eu amo sua solução) e sua resposta é correta.

O caso de uso é que geralmente queremos mover um arquivo em um local remoto (o problema real), por exemplo. /folder/subfolder/configFile.dat TO configFile.dat.orig

Esta forma do comando adiciona uma extensão de arquivo (não substituindo a extensão original)

mv ~/folder/subfolder/file.txt{,.orig}

Explicado: "{, .orig}" significa substituir (nada) no final do nome do arquivo por (algo) ".orig"

OU para remover uma extensão de arquivo (inverter a renomeação)

mv ~/folder/subfolder/file.txt{.orig,}

Nota: Ainda no tópico "A maneira mais rápida de renomear arquivos sem redigitar o caminho do diretório"

    
por 13.04.2018 / 14:58

Tags