Como usar o comando renomear no Linux

Domine a força motriz de renomeação de arquivos do mundo Linux e dê a mim – e a você – um descanso. Renomear é 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 mv?

Não há nada de errado com o mv. O comando faz um bom trabalho, e é encontrado em todas as distribuições 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 comando mv tem um propósito na vida: 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 o mv não é uma ferramenta dedicada para renomeação de arquivos.

Renomeando um único arquivo com mv

Para usar mv para renomear um arquivo, digite 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 ls para verificar se o arquivo foi renomeado.

mv oldfile.txt newfile.txt
ls *.txt

Renomeando vários arquivos com mv

As coisas ficam mais complicadas quando você deseja renomear vários arquivos. mv nã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 mv está em total contraste com a facilidade de usar mv para 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 lutamos para que eu faça isso por nós? Vamos dar uma olhada nos arquivos.

ls *.prog -l

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

for f in *.prog; do mv -- "$f" "${f%.prog}.prg"

para f em * .prog;  do mv -

Fez esse trabalho? Vamos verificar os arquivos e ver.

ls *.pr*

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

  Os carimbos de data / hora do arquivo Linux explicados: atime, mtime e ctime

O que acabou de acontecer?

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

for f in *.prog; do mv -- "$f" "${f%.prog}.prg"

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

A próxima parte diz o que o processamento fará. Ele está usando o mv para 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 comando renomear.

renomear não faz parte de uma distribuição Linux padrão, 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 você está usando.

em distribuições derivadas do Ubuntu e Debian, você instala renomear desta forma:

sudo apt-get install rename

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

sudo dnf install prename

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

sudo pacman -Syu perl-rename

Vamos fazer isso de novo

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

ls *.prog

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

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

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

O que aconteceu neste tempo?

Vamos explicar essa mágica em três partes.

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

A última parte é * .prog, que informa a renomeação para operar em todos os arquivos “.prog”.

A parte do meio define o trabalho que queremos fazer em cada nome de arquivo. O s significa substituto. O primeiro termo (.prog) é o que renomear buscará 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, é um Perl ‘expressão regular‘e é o que dá ao comando de renomeação sua flexibilidade.

Alteração de 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 arquivo são prefixados com “slang_”. Podemos verificar isso com ls.

ls sl*.c

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

rename 's/slang_/sl_' *.c

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

  Como compartilhar o terminal Linux online com o Teleconsole

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

ls sl*.c

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
rename 's/sl_//' *.c
ls *.c

Podemos ver a partir do comando ls que nossos arquivos “.c” são todos prefixados com “sl_”. Vamos nos livrar disso completamente.

O comando renomear 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.

renomear 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 comando ls 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. Em seguida, usaremos renomear para substituir essa string pela string “parâmetro”. Usaremos ls mais uma vez para ver o efeito que o comando rename teve sobre esses arquivos.

ls *param*
rename 's/param/parameter' *.c
ls *param*

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 de seu nome, logo antes da extensão.

O comando renomear irá procurar por “param” em todos os lugares do nome do arquivo e substituí-lo por “parâmetro” em todos os casos.

O segundo uso do comando ls 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 de 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 metacaractere string (^) para restringir nossa pesquisa ao início dos nomes de arquivo.

ls *param*.c
rename 's/^parameter/value/' *.c
ls *param*.c
ls value*.c

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.

  Como acessar o Facebook Messenger no desktop Linux com Caprine

Nosso comando renomear usa o metacaractere de início de linha (^) antes do termo de pesquisa “parâmetro”. Isso informa ao renomear para 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 substituto termo “valor”.

O poder de renomear está no poder do Perl. Todos os poder do Perl está à sua disposição.

Pesquisando com agrupamentos

renomear ainda tem 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, portanto, 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.ce strangle.c. Podemos renomear as duas strings de uma vez usando uma técnica chamada agrupamento.

A expressão central deste comando de renomeação 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
rename 's/(stri|stra)ng/bang/' *.c
ls ban*.c

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

Usando traduções com renomear

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

No comando renomear abaixo, observe que não estamos usando um s / para iniciar a expressão central, estamos usando y /. Isso informa ao renomear que não estamos realizando uma substituição; estamos realizando uma tradução.

O termo az é uma expressão Perl que significa todos os caracteres minúsculos na sequência de a a z. Da mesma forma, o termo AZ 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 todos os arquivos “.prg” a maiúsculas, use este comando:

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

ls *.PRG

O comando ls 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 é sensível a maiúsculas e minúsculas.

Podemos reverter esse último comando invertendo a posição dos termos az e AZ na expressão central.

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

ls *.prg

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 comando rename, você não precisa ter muito conhecimento de Perl para colher grandes benefícios em potência, simplicidade e tempo.