- Gerar link
- X
- Outros aplicativos
Postagem em destaque
- Gerar link
- X
- Outros aplicativos
Renomear arquivos é algo corriqueiro e extremamente simples de ser realizado, principalmente com os gerenciadores de arquivos atuais que permitem ao usuário selecionar uma grande lista de arquivos e definir um novo nome, prefixo ou sufixo de sua preferência.
Apesar de todas essas facilidades há aqueles que optam pela tradicional linha de comando (shell) devido a sua flexibilidade e eficiência.
Para aplicação considere a lista de arquivos a seguir:
arquivo10.txt arquivo14.txt arquivo18.txt arquivo2.txt arquivo6.txt arquivo11.txt arquivo15.txt arquivo19.txt arquivo3.txt arquivo7.txt arquivo12.txt arquivo16.txt arquivo1.txt arquivo4.txt arquivo8.txt arquivo13.txt arquivo17.txt arquivo20.txt arquivo5.txt arquivo9.txt
Os métodos apresentados abaixo tem como ação alterar o prefixo 'arquivo' de cada documento por 'arq', mantendo as enumerações presentes.
1. Utilizando o comando rename.
O rename é uma ferramenta em perl que permite renomear múltiplos arquivos de acordo com a regra especificada como primeiro argumento e com a seguinte sintaxe:
rename 'perlexpr' arquivos ...
A construção da regra (perlexpr) lembra muito a sintaxe utilizada pelo comando sed.
Comando:
rename 's/^arquivo/arq/' *
O comando deve ser executado dentro do diretório que contém os arquivos a serem alterados ou especificar o caminho completo (suporta glob).
2. Combinado os comandos find, sed e mv. (recursivo)
Nesse método vou utilizar o comando find para listar os arquivos do diretório e redirecionar a saída para o sed que irá construir uma linha de comando válida com mv que será processada posteriormente. O sed tem um papel fundamental na implementação da estrutura utilizando os retrovisores \1 e \3 para separar os elementos: diretório, nome do arquivo e extensão.
Saída:
$ find | sed -rn 's/^(.*\/)(arquivo)([^/]*\.[a-z]+)$/mv "&" "\1arq\3"/p' mv "./arquivo15.txt" "./arq15.txt" mv "./arquivo17.txt" "./arq17.txt" mv "./arquivo5.txt" "./arq5.txt" mv "./arquivo16.txt" "./arq16.txt" mv "./arquivo8.txt" "./arq8.txt" mv "./arquivo9.txt" "./arq9.txt" mv "./arquivo6.txt" "./arq6.txt" mv "./arquivo10.txt" "./arq10.txt" mv "./arquivo7.txt" "./arq7.txt" mv "./arquivo13.txt" "./arq13.txt" mv "./arquivo18.txt" "./arq18.txt" mv "./arquivo20.txt" "./arq20.txt" mv "./arquivo14.txt" "./arq14.txt" mv "./arquivo3.txt" "./arq3.txt" mv "./arquivo19.txt" "./arq19.txt" mv "./arquivo12.txt" "./arq12.txt" mv "./arquivo1.txt" "./arq1.txt" mv "./arquivo11.txt" "./arq11.txt" mv "./arquivo2.txt" "./arq2.txt" mv "./arquivo4.txt" "./arq4.txt"
Para executar e renomear os arquivos basta inserir o interpretador de comandos ao final da linha, veja:
Comando:
$ find | sed -rn 's/^(.*\/)(arquivo)([^/]*\.[a-z]+)$/mv "&" "\1arq\3"/p' | $0
Obs: Por omissão o find busca os arquivos a partir do diretório atual.
Para especificar o nome a ser substituído e o novo nome basta alterar as expressões 'arquivo' e 'arq'.
Saída:
$ ls
arq10.txt arq12.txt arq14.txt arq16.txt arq18.txt arq1.txt arq2.txt arq4.txt arq6.txt arq8.txt
arq11.txt arq13.txt arq15.txt arq17.txt arq19.txt arq20.txt arq3.txt arq5.txt arq7.txt arq9.txt
Participe compartilhando a experiência de perguntar e responder questões pertinentes ao shell script, afim de promover a troca de informações e conhecimentos.
Acesse nosso fórum clicando aqui
Comentários
Postar um comentário