Como usar o comando renomear no Linux
Domine a potência da renomeação de arquivos do mundo Linux e dê mv
- e 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 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. Por isso, está sempre disponível. Mas às vezes você só precisa de uma escavadeira, não de uma pá.
O mv
comando tem um propósito na vida, que é mover arquivos. É um efeito colateral feliz que pode ser usado para mover um arquivo existente para dentro um novo arquivo, com um novo nome. O efeito líquido é renomear o arquivo, para que possamos obter o que queremos. Mas mv
não é uma ferramenta dedicada de renomeação de arquivos.
Renomeando um único arquivo com mv
Usar mv
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 usarls
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 alguma fu de linha de comando de nível médio, mas a complexidade de renomear vários arquivos com mv
está em forte contraste com a facilidade de uso 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 nós disputamos mv
em fazer 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.
para f em * .prog; do mv - "$ f" "$ {f% .prog} .prg"
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.
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 o que o processamento irá Faz. Está usandomv
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 renomear
comando.
renomear
nã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ê só 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 que você instala renomear
como isso:
sudo apt-get install renomear
Em distribuições derivadas de Fedora e RedHat que você instala prename
como isso. 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 é chamado perl-rename
.
sudo pacman -Syu perl-renomear
Vamos fazer isso de novo
E desta vez vamos usar 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 ls
se funcionou. Lembre-se de substituir renomear
com o 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 *
Funcionou, eles agora 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.
O primeiro parte é o nome do comando, renomear
(ou prename
ou perl-rename
, para as outras distribuições).
O durar parte é * .prog
, o que diz renomear
para operar em todos os arquivos “.prog”.
O meio parte define o trabalho que queremos fazer em cada nome de arquivo. O s
significa substituto. O primeiro termo (.prog
) é o que renomear
irá procurar em cada nome de arquivo e o segundo termo (.prg
) é o que será substituído.
A parte do meio do comando, ou expressão central, é uma "expressão regular" Perl e é o que dá o renomear
comandar sua flexibilidade.
Alterar outras partes de um nome de arquivo
Mudamos as extensões dos nomes de arquivos até agora, vamos corrigir outras partes dos nomes de 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
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.
renomear 's / slang_ / sl_' * .c
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_”.
Podemos verificar o resultado desse comando repetindo o ls
comando de cima 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
renomear 's / sl _ //' * .c
ls * .c
Podemos ver a partir do ls
comando que nossos arquivos “.c” são todos precedidos de “sl_”. Vamos nos livrar disso completamente.
O renomear
comando 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
irá 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 ls
comando 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 possuem a string “param” no nome do arquivo. Então vamos usar renomear
para substituir essa string pela string “parâmetro”. Vamos usar ls
mais uma vez para ver o efeito do renomear
comando teve nesses arquivos.
ls * param *
renomear 's / param / parâmetro' * .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 começar de seu nome. third_param.c tem “param” no fim de seu nome, logo antes da extensão.
O renomear
O comando irá pesquisar por “param” em todo o nome do arquivo e substituí-lo por “parâmetro” em todos os casos.
O segundo uso dols
comando nos mostra que isso é exatamente 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 dos arquivos.
ls * param * .c
renomear / ^ parâmetro / valor / '* .c
ls * param * .c
valor ls * .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.
Nosso renomear
comando usa o início da linha(^
) metacaractere antes do termo de pesquisa "parâmetro". Isso diz renomear
para considerar que o termo de pesquisa foi encontrado apenas 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 fim do nome do arquivo não foi modificado, mas os três nomes de arquivo que tinham "parâmetro" no começar de seus nomes tiveram a string de pesquisa substituída pelo termo substituto "valor".
O poder de renomear
está no poder do Perl. Todo o poder do Perl está à sua disposição.
Pesquisando com agrupamentos
renomear
tem 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ão aqui.
Neste exemplo, usamos ls
para verificar quais arquivos 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 renomear
comando irá procurar por strings dentro de nomes de arquivos que tenham a sequência de caracteres “stri” ou “Stra” em que essas sequências são imediatamente seguidas por “ng”. Em outras palavras, nosso termo de pesquisa procurará “string” e “Strang”. O termo de substituição é “bang”.
ls str * .c
renomear 's / (stri | stra) ng / bang /' * .c
ls ban * .c
Usandols
uma segunda vez confirma que string.c tornou-se bang.ce strangle.c agora é bangle.c.
Usando traduções com renomear
O renomear
comando 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 renomear
comando abaixo, observe que não estamos usando um s /
para iniciar a expressão central, estamos usando y /
. Isso dizrenomear
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 todos os arquivos “.prg” a maiúsculas, use este comando:
renomear ‘y / a-z / A-Z /’ * .prg
ls * .PRG
O ls
O comando 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 do a-z
e A-Z
termos na expressão central.
renomear ‘y / A-Z / a-z /’ * .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 renomear
comando, você não precisa ter muito conhecimento de Perl para colher grandes benefícios em poder, simplicidade e tempo.