![Laptop Linux mostrando um prompt bash](https://systempeaker.com/wp-content/uploads/2021/10/1634706782_35_img_5c94224b1cfd7.png)
Familiarize-se com o poder de renomeação de arquivos do mundo Linux e forneça mv
—E você— uma pausa. Rename
é flexível, rápido e, as vezes, ainda mais fácil. Aqui está um tutorial deste poderoso comando.
E quanto a mim?
Não há nada de errado com mv
. O comando faz um bom trabalho, e é encontrado em todas as distribuições Linux, no macOS e outros sistemas operacionais semelhantes ao Unix. É por isso que está sempre habilitado. Mas de vez em quando você só precisa de uma escavadeira, não é uma pá.
a mv
O comando tem um propósito na vida e é mover arquivos. É um efeito colateral feliz que pode ser usado para mover um arquivo existente dentro de um novo arquivo, com um novo nome. O efeito líquido é renomear o arquivo, então nós conseguimos o que queremos. Mas mv
não é uma ferramenta dedicada de renomeação de arquivos.
Renomear 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 usar ls
para verificar se o nome do arquivo foi alterado.
mv oldfile.txt newfile.txt
ls * .txt
Renomear vários arquivos com mv
As coisas ficam 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. Isso é bom se você conhece qualquer fu de linha de comando de grau médio, mas a complexidade de renomear vários arquivos com mv
contrasta com facilidade de uso mv
renomear um único arquivo.
As coisas aumentam rapidamente.
Digamos que temos um diretório com uma variedade de arquivos, de diferentes tipos. Alguns desses arquivos têm uma extensão “.Alguns desses arquivos têm uma extensão”. Alguns desses arquivos têm uma extensão “.prg”.
Como nós lutamos? mv
fazer isso por nós? Vamos dar uma olhada nos arquivos.
ls * .prog -l
Esta é uma maneira de fazer isso sem recorrer à escrita de um arquivo de script bash real.
para f em * .prog; fazer mv -- "$f" "${f% .prog}.prg"
Funcionou? Vamos examinar os arquivos e ver.
ls * .pr *
Então, sim, funcionou. Alguns desses arquivos têm uma extensão “.prg” Alguns desses arquivos têm uma extensão “.Alguns desses arquivos têm uma extensão” Alguns desses arquivos têm uma extensão.
O que acabou de acontecer?
O que aquele longo comando realmente fez? Vamos analisar isso.
para f em * .prog; fazer mv -- "$f" "${f% .prog}.prg"
Alguns desses arquivos têm uma extensão “.Alguns desses arquivos têm uma extensão” Alguns desses arquivos têm uma extensão, na sua vez.
A próxima parte diz o que o processamento fará. Faz. Está usando mv
para mover cada arquivo para um novo arquivo. Alguns desses arquivos têm uma extensão “.Alguns desses arquivos têm uma extensão”. Em seu lugar, Alguns desses arquivos têm uma extensão “.prg”.
Deve haver uma maneira mais fácil
Com certeza. É o rename
comando.
rename
não faz parte de uma distribuição Linux padrão, então você precisará instalá-lo. Ele também tem um nome diferente em diferentes famílias Linux, mas todos eles 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 rename
assim:
sudo apt-get install renomear
Em distribuições derivadas de Fedora e RedHat, instalar prename
assim. Por favor, observe o “p” Alguns desses arquivos têm uma extensão, o que significa Perl.
sudo dnf install prename
Para instalá-lo no Manjaro Linux use o seguinte comando. Observe que o comando renomear é chamado perl-rename
.
sudo pacman -Syu perl-renomear
Vamos fazer de novo
E desta vez vamos usar rename
. Alguns desses arquivos têm uma extensão “.Alguns desses arquivos têm uma extensão”.
ls * .prog
Agora vamos usar o seguinte comando para renomeá-los. Mais tarde iremos verificar com ls
sim funcionou. Lembre-se de substituir rename
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 *
Isso funcionou, Alguns desses arquivos têm uma extensão “.prg” Alguns desses arquivos têm uma extensão “.Alguns desses arquivos têm uma extensão” Alguns desses arquivos têm uma extensão.
O que aconteceu neste momento?
Vamos explicar aquele pouquinho de magia, em três partes.
a primeiro parte é o nome do comando, rename
(o prename
o perl-rename
, para as outras distribuições).
a Mais recentes parte é *.prog
, que diz rename
Alguns desses arquivos têm uma extensão “.Alguns desses arquivos têm uma extensão”.
a metade parte define o trabalho que queremos fazer em cada nome de arquivo. a s
significa substituto. O primeiro termo (.prog
) o que é rename
iráprocurar cada nome de arquivo e segundo termo (.prg
) é o que será substituído.
A parte central do comando, ou expressão central, é um Perl ‘frase regular'E é isso que dá o rename
domine sua flexibilidade.
Alterar outras partes do nome de um arquivo
Mudamos as extensões de nome de arquivo até agora, vamos modificar outras partes dos nomes dos arquivos.
Existem muitos arquivos de código-fonte C no diretório. Alguns desses arquivos têm uma extensão “Alguns desses arquivos têm uma extensão”. Podemos verificar isso com ls
.
ls sl * .c
Alguns desses arquivos têm uma extensão “Alguns desses arquivos têm uma extensão” com “Alguns desses arquivos têm uma extensão”. 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
Alguns desses arquivos têm uma extensão “.c” Alguns desses arquivos têm uma extensão “Alguns desses arquivos têm uma extensão”. Alguns desses arquivos têm uma extensão “Alguns desses arquivos têm uma extensão” Alguns desses arquivos têm uma extensão, Alguns desses arquivos têm uma extensão “Alguns desses arquivos têm uma extensão”.
Podemos verificar o resultado desse comando repetindo o ls
comando de cima com os mesmos parâmetros:
ls sl * .c
Excluir parte do nome de um arquivo
Podemos excluir 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
Alguns desses arquivos têm uma extensão “.c” Alguns desses arquivos têm uma extensão “Alguns desses arquivos têm uma extensão”. Vamos nos livrar disso completamente.
a rename
O comando segue o mesmo formato de antes. Vamos procurar arquivos “.c”. Vamos procurar arquivos “Alguns desses arquivos têm uma extensão”, mas não há termo de substituição. Duas barras invertidas sem nada entre eles não significam nada, uma string vazia.
rename
Vamos procurar arquivos “.c” na sua vez. Vamos procurar arquivos “Alguns desses arquivos têm uma extensão” Vamos procurar arquivos. Se encontrado, não será substituído por nada. Em outras palavras, termo de pesquisa foi removido.
O segundo uso de ls
Vamos procurar arquivos “Alguns desses arquivos têm uma extensão” Vamos procurar arquivos “.c”.
Limita as alterações a partes específicas dos nomes dos arquivos
Vamos usar ls
Vamos procurar arquivos “Vamos procurar arquivos” em seu nome de arquivo. Então vamos usar rename
Vamos procurar arquivos “parâmetro”. Usaremos ls
mais uma vez para ver o efeito rename
comando tinha nesses arquivos.
ls * param *
renomear 's / param / parâmetro' * .c
ls * param *
Vamos procurar arquivos “Vamos procurar arquivos” em seu nome de arquivo. param.c, Vamos procurar arquivos “Vamos procurar arquivos” no começar do nome dele. Vamos procurar arquivos “Vamos procurar arquivos” no fim do nome dele, um pouco antes da extensão.
a rename
Vamos procurar arquivos “Vamos procurar arquivos” Vamos procurar arquivos “parâmetro” Vamos procurar arquivos.
O segundo uso de ls
O comando nos mostra que isso é exatamente o que aconteceu. E “Vamos procurar arquivos” Vamos procurar arquivos, Vamos procurar arquivos “parâmetro”.
Podemos usar metacaracteres Perl para refinar o comportamento da expressão do meio. Metacaracteres são símbolos que representam posições ou sequências de caracteres. Como um exemplo, ^
Isso significa “Vamos procurar arquivos”, $
Isso significa “Vamos procurar arquivos” e .
significa qualquer caractere único (além de 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
Vamos procurar arquivos “parâmetro” Vamos procurar arquivos.
Nosso rename
o comando usa o início da linha (^
) metacaractere antes do termo de pesquisa “parâmetro”. Isso diz rename
para considerar o termo de pesquisa encontrado apenas se estiver no início do nome do arquivo. o “parâmetro” metacaractere antes do termo de pesquisa.
Verificando com ls
, metacaractere antes do termo de pesquisa “parâmetro” no fim o nome do arquivo não foi modificado, metacaractere antes do termo de pesquisa “parâmetro” no começar metacaractere antes do termo de pesquisa “valor”.
O poder de rename
está no poder do Perl. Toda a poder do Perl está à sua disposição.
Pesquisa com clusters
rename
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 cadeias, portanto, uma simples pesquisa e substituição não funcionará aqui.
Neste exemplo, usamos ls
metacaractere antes do termo de pesquisa “metacaractere antes do termo de pesquisa”. São dois deles, string.cy strangle.c. Podemos renomear as duas strings ao mesmo tempo usando uma técnica chamada agrupamento.
A expressão central deste rename
metacaractere antes do termo de pesquisa “metacaractere antes do termo de pesquisa” o “metacaractere antes do termo de pesquisa” metacaractere antes do termo de pesquisa “ng”. Em outras palavras, metacaractere antes do termo de pesquisa “corrente” e “metacaractere antes do termo de pesquisa”. metacaractere antes do termo de pesquisa “metacaractere antes do termo de pesquisa”.
ls str * .c
renomear de /(stri|Stra)de / bang / '* .c
é você * .c
Usando ls
uma segunda vez confirma que string.c tornou-se bang.ce strangle.c agora é bangle.c.
Uso de traduções com mudança de nome
a rename
O comando pode realizar ações em nomes de arquivos chamadas traduções. Um exemplo simples de tradução seria forçar um conjunto de nomes de arquivos a maiúsculas.
No rename
comando abaixo, observe que não estamos usando um s/
para iniciar a expressão central, estamos usando y/
. Isso diz rename
não estamos fazendo uma substituição; estamos fazendo uma tradução.
a a-z
termo é uma expressão Perl que significa todos os caracteres minúsculos na sequência de a a z. Da mesma forma, a A-Z
termo representa todas as letras maiúsculas na sequência de A a Z.
metacaractere antes do termo de pesquisa “se alguma das letras minúsculas de a a z for encontrada no nome do arquivo, se alguma das letras minúsculas de a a z for encontrada no nome do arquivo”.
se alguma das letras minúsculas de a a z for encontrada no nome do arquivo “.prg” se alguma das letras minúsculas de a a z for encontrada no nome do arquivo, use este comando:
renomear 'y / a / AZ /’ * .prg
ls * .PRG
a ls
se alguma das letras minúsculas de a a z for encontrada no nome do arquivo “.prg” se alguma das letras minúsculas de a a z for encontrada no nome do arquivo. Na realidade, para ser estritamente preciso, se alguma das letras minúsculas de a a z for encontrada no nome do arquivo “.prg”. se alguma das letras minúsculas de a a z for encontrada no nome do arquivo “.PRG”. Linux diferencia maiúsculas de 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 / a /’ * .PRG
ls * .prg
Você não aprende Perl em cinco minutos
Familiarizar-se com Perl é um tempo bem gasto. Mas, para começar a usar os recursos de economia de tempo do rename
comando, você não precisa de muito conhecimento de Perl para obter grandes benefícios potenciais, simplicidade e tempo.
setTimeout(função(){
!função(f,b,e,v,n,t,s)
{E se(f.fbq)Retorna;n = f.fbq = função(){n.callMethod?
n.callMethod.apply(n,argumentos):n.queue.push(argumentos)};
E se(!f._fbq)f._fbq = n;n.push = n;n.loaded =!0;n.version = ’2.0′;
n.queue =[];t = b.createElement(e);t.async =!0;
t.src = v;s = b.getElementsByTagName(e)[0];
s.parentNode.insertBefore(t,s) } (window, documento,'roteiro',
‘Https://connect.facebook.net/en_US/fbevents.js ’);
fbq('iniciar', ‘335401813750447’);
fbq('acompanhar', ‘PageView’);
},3000);