Como usar o comando renomear no Linux

Laptop Linux mostrando um prompt bash
Fatmawati Achmad Zaenuri / Shutterstock.com

Conheça a força motriz da renomeação de arquivos do mundo Linux e dê mv– e a você – um descanso. Renameé flexível, rápido e às vezes até mais fácil. Aqui está um tutorial para esta potência de um comando.

O que há de errado com o mv?

Não há nada de errado com mv. O comando faz um bom trabalho e é encontrado em todas as distribuições do Linux, no macOS e em outros sistemas operacionais do tipo Unix. Portanto, está sempre disponível. Mas às vezes você só precisa de uma escavadeira, não de uma pá.

O mvcomando tem um propósito na vida, que é mover arquivos. É um efeito colateral feliz poder ser usado para mover um arquivo existente para um novo arquivo, com um novo nome. O efeito líquido é renomear o arquivo, para que possamos obter o que queremos. Mas mvnão é uma ferramenta dedicada de renomeação de arquivos.

Renomeando um único arquivo com mv

Para usar mvpara renomear um tipo de arquivo mv, um espaço, o nome do arquivo, um espaço e o novo nome que você deseja que o arquivo tenha. Em seguida, pressione Enter.

Você pode usar  lspara verificar se o arquivo foi renomeado.

mv oldfile.txt newfile.txt
ls * .txt

mv oldfile.txt newfile.txt em uma janela de terminal

Renomeando vários arquivos com mv

As coisas ficam mais complicadas quando você deseja renomear vários arquivos. mvnão tem capacidade para renomear vários arquivos. Você deve recorrer ao uso de alguns truques bacanas do Bash. Isso é bom se você conhece algum fu de linha de comando de nível médio, mas a complexidade de renomear vários arquivos com mvestá em total contraste com a facilidade de usar mvpara renomear um único arquivo.

As coisas aumentam rapidamente.

Digamos que temos um diretório com uma variedade de arquivos, de tipos diferentes. Alguns desses arquivos têm uma extensão “.prog”. Queremos renomeá-los na linha de comando para que tenham uma extensão “.prg”.

Como vamos lutar mvpara fazer isso por nós? Vamos dar uma olhada nos arquivos.

ls * .prog -l

ls * .prog -l em uma janela de terminal

Esta é uma maneira de fazer isso sem recorrer à gravação de um arquivo de script Bash real.

para f em * .prog; do mv - "$ f" "$ {f% .prog} .prg"

para f em * .prog;  do mv - "$ f" "$ {f% .prog} .prg" em uma janela de terminal

Isso funcionou? Vamos verificar os arquivos e ver.

ls * .pr *

ls * .pr * em uma janela de terminal

Então, sim, funcionou. Eles são todos arquivos “.prg” agora, e não há arquivos “.prog” no diretório.

Recomendado:  Facebook lança ferramenta de reunião de realidade virtual gratuita

O que acabou de acontecer?

O que esse comando longo realmente fez? Vamos decompô-lo.

para f em * .prog; do mv - "$ f" "$ {f% .prog} .prg"

A primeira parte inicia um loop que irá processar cada arquivo “.prog” do diretório, por sua vez.

A próxima parte diz que o processamento vai fazer . Ele está usando  mvpara mover cada arquivo para um novo arquivo. O novo arquivo será nomeado com o nome do arquivo original, excluindo a parte “.prog”. Uma nova extensão de “.prg” será usada em seu lugar.

Tem que haver uma maneira mais simples

Definitivamente. É o renamecomando.

renamenão faz parte de uma distribuição padrão do Linux, portanto, você precisará instalá-lo. Ele também tem um nome diferente em diferentes famílias de Linux, mas todos funcionam da mesma maneira. Você apenas terá que substituir o nome do comando apropriado de acordo com o tipo de Linux que está usando.

em distribuições derivadas do Ubuntu e Debian, você instala renameassim:

sudo apt-get install renomear

sudo apt-get install renomear em uma janela de terminal

Em distribuições derivadas do Fedora e RedHat, você instala prenameassim. Observe o “p” inicial, que significa Perl.

sudo dnf install prename

sudo dnf instalar prename em uma janela de terminal

Para instalá-lo no Manjaro Linux, use o seguinte comando. Observe que o comando de renomeação é chamado perl-rename.

sudo pacman -Syu perl-renomear

sudo pacman -Syu perl-rename em uma janela de terminal

Vamos fazer isso de novo

E desta vez usaremos rename. Vamos voltar no tempo para que tenhamos um conjunto de arquivos “.prog”.

ls * .prog

ls * .prog em uma janela de terminal

Agora vamos usar o seguinte comando para renomeá-los. Em seguida, verificaremos lsse funcionou. Lembre-se de substituir renamepelo nome de comando apropriado para o seu Linux se você não estiver usando o Ubuntu ou um Linux derivado do Debian.

renomear 's / .prog / .prg /' * .prog
ls * .pr *

renomear 's / .prog / .prg /' * .prog em uma janela de terminal

Funcionou, agora todos eles são arquivos “.prg” e não há arquivos “.prog” restantes no diretório.

O que aconteceu neste tempo?

Vamos explicar esse pedaço de magia em três partes.

A primeira parte é o nome do comando, rename(ou prenameou perl-rename, para as outras distribuições).

A última parte é *.prog, que diz renamepara operar em todos os arquivos “.prog”.

A parte do meio define o trabalho que queremos fazer em cada nome de arquivo. O ssubstituto de meios. O primeiro termo ( .prog) é o que renameserá pesquisado em cada nome de arquivo e o segundo termo ( .prg) é o que ele será substituído.

A parte do meio do comando, ou expressão central, é uma ‘ expressão regular ‘ Perl e é o que dá ao renamecomando sua flexibilidade.

Alterar outras partes de um nome de arquivo

Mudamos as extensões dos arquivos até agora, vamos corrigir outras partes dos nomes dos arquivos.

No diretório estão vários arquivos de código-fonte C. Todos os nomes de arquivos são prefixados com “slang_”. Podemos verificar isso com ls.

ls sl * .c

ls sl * .c em uma janela de terminal

Vamos substituir todas as ocorrências de “slang_” por “sl_”. O formato do comando já é familiar para nós. Estamos apenas mudando o termo de pesquisa, o termo de substituição e o tipo de arquivo.

renomear 's / slang_ / sl_' * .c

renomear 's / slang_ / sl_' * .c em uma janela de terminal

Desta vez, estamos procurando por arquivos “.c”, e procurando por “slang_”. Sempre que “slang_” for encontrado em um nome de arquivo, ele é substituído por “sl_”.

Recomendado:  Como usar VLOOKUP em vários valores

Podemos verificar o resultado desse comando repetindo o lscomando acima com os mesmos parâmetros:

ls sl * .c

ls sl * .c em uma janela de terminal

Excluindo parte de um nome de arquivo

Podemos remover uma parte de um nome de arquivo substituindo o termo de pesquisa por nada.

ls * .c
renomear 's / sl _ //' * .c
ls * .c

renomear 's / sl _ //' * .c em uma janela de terminal

Podemos ver pelo lscomando que nossos arquivos “.c” são todos prefixados com “sl_”. Vamos nos livrar disso completamente.

O renamecomando segue o mesmo formato de antes. Estaremos procurando por arquivos “.c”. O termo de pesquisa é “sl_”, mas não há termo de substituição. Duas barras invertidas sem nada entre elas não significam nada, uma string vazia.

renameirá processar cada arquivo “.c” por vez. Ele irá procurar por “sl_” no nome do arquivo. Se for encontrado, não será substituído por nada. Em outras palavras, o termo de pesquisa é excluído.

O segundo uso do lscomando confirma que o prefixo “sl_” foi removido de todos os arquivos “.c”.

Limitar alterações a partes específicas de nomes de arquivo

Vamos usar ls para ver os arquivos que têm a string “param” no nome do arquivo. Então vamos usar renamepara substituir essa string pela string “parâmetro”. Usaremos lsmais uma vez para ver o efeito que o renamecomando teve nesses arquivos.

ls * param *
renomear 's / param / parâmetro' * .c
ls * param *

renomear 's / param / parâmetro' * .c em uma janela de terminal

Quatro arquivos foram encontrados com “param” no nome do arquivo. param.c, param_one.c e param_two.c têm “param” no início de seus nomes. third_param.c tem “param” no final do nome, antes da extensão.

O renamecomando irá pesquisar por “param” em todo o nome do arquivo e substituí-lo por “parâmetro” em todos os casos.

O segundo uso do  lscomando nos mostra que foi exatamente isso o que aconteceu. Se “param” estava no início ou no final do nome do arquivo, ele foi substituído por “parâmetro”.

Podemos usar os metacaracteres do Perl para refinar o comportamento da expressão do meio. Metacaracteres são símbolos que representam posições ou sequências de caracteres. Por exemplo, ^significa “início de uma string”, $significa “fim de uma string” e .significa qualquer caractere único (exceto um caractere de nova linha).

Vamos usar o início do metacharacter de string ( ^) para restringir nossa pesquisa ao início dos nomes de arquivo.

ls * param * .c
renomear / ^ parâmetro / valor / '* .c
ls * param * .c
valor ls * .c

renomear / ^ parâmetro / valor / '* .c em uma janela de terminal

Os arquivos que renomeamos anteriormente são listados, e podemos ver que a string “parâmetro” está no início de três nomes de arquivo e no final de um dos nomes de arquivo.

Recomendado:  Como fazer com que a página inicial do Google pronuncie seu nome corretamente

Nosso renamecomando usa o (^metacaractere do início da linha  ) antes do termo de pesquisa “parâmetro”. Isso diz renamepara considerar apenas o termo de pesquisa como encontrado se estiver no início do nome do arquivo. A string de pesquisa “parâmetro” será ignorada se estiver em qualquer outro lugar no nome do arquivo.

Verificando com ls, podemos ver que o nome do arquivo que tinha “parâmetro” no final do nome do arquivo não foi modificado, mas os três nomes de arquivo que tinham “parâmetro” no início de seus nomes tiveram a string de pesquisa substituída pelo termo substituto “valor.”

O poder do renameestá no poder do Perl. Todo o poder do Perl está à sua disposição.

Pesquisando com agrupamentos

renametem ainda mais truques na manga. Vamos considerar o caso em que você pode ter arquivos com strings semelhantes em seus nomes. Eles não são exatamente as mesmas strings, então uma simples pesquisa e substituição não funcionará aqui.

Neste exemplo usamos ls para verificar quais arquivos nós temos que começam com “str”. Existem dois deles, string.c e strangle.c. Podemos renomear as duas strings de uma vez usando uma técnica chamada agrupamento.

A expressão central deste renamecomando irá procurar por strings dentro de nomes de arquivos que tenham a sequência de caracteres “stri” ou “stra” onde essas sequências são imediatamente seguidas por “ng”. Em outras palavras, nosso termo de pesquisa irá procurar por “string” e “strang”. O termo de substituição é “bang”.

ls str * .c
renomear 's / (stri | stra) ng / bang /' * .c
ls ban * .c

renomear 's / (stri | stra) ng / bang /' * .c em uma janela de terminal

Usando  ls uma segunda vez, confirma que string.c se tornou bang.ce strangle.c agora é bangle.c.

Usando traduções com renomear

O renamecomando pode executar ações em nomes de arquivos chamados traduções. Um exemplo simples de tradução seria forçar um conjunto de nomes de arquivo em maiúsculas.

No renamecomando abaixo, observe que não estamos usando um s/ para iniciar a expressão central que estamos usando y/. Isso indica  renameque não estamos realizando uma substituição; estamos realizando uma tradução.

O a-z termo é uma expressão Perl que significa todos os caracteres minúsculos na sequência de a a z. Da mesma forma, o A-Z termo representa todas as letras maiúsculas na sequência de A a Z.

A expressão central neste comando pode ser parafraseada como “se alguma das letras minúsculas de a a z for encontrada no nome do arquivo, substitua-as pelos caracteres correspondentes da sequência de caracteres maiúsculos de A a Z”.

Para forçar os nomes de arquivo de todos os arquivos “.prg” a maiúsculas, use este comando:

renomear ‘y / az / AZ /’ * .prg

ls * .PRG

renomear 'y / az / AZ /' * .prg em uma janela de terminal

O lscomando nos mostra que todos os nomes de arquivos “.prg” agora estão em maiúsculas. Na verdade, para ser estritamente preciso, eles não são mais arquivos “.prg”. Eles são arquivos “.PRG”. O Linux diferencia maiúsculas de minúsculas.

Podemos reverter esse último comando invertendo a posição dos  termos a-ze A-Zna expressão central.

renomear ‘y / AZ / az /’ * .PRG

ls * .prg

renomear 'y / AZ / az /' * .PRG em uma janela de terminal

Você (Wo | Do) não aprende Perl em cinco minutos

Conhecer o Perl é um tempo bem gasto. Mas para começar a usar os recursos de economia de tempo do renamecomando, você não precisa ter muito conhecimento de Perl para colher grandes benefícios em poder, simplicidade e tempo.