Logo Hardware.com.br
brunofp300
brunofp300 Membro Senior Registrado
364 Mensagens 0 Curtidas

Como renomear arquivos em lote no linux ? (remover os 3 primeiros caracteres)

#1 Por brunofp300 15/09/2012 - 18:25
Boa tarde Pessoal,
Estou precisando fazer algo relativamente simples mas nao encontrei o comando para executar isso. Eu preciso renomear uns 400 mil arquivos, todos eles são compostos por 3 letras iniciais e 18 numeros. Eu preciso remover os 3 primeiros caracteres de todos esses arquivos.
Ex: os arquivos tem o seguintes nomes:
out201215090000000001.xml
out201215090000000002.xml
out201215090000000002.xml

Eu preciso que eles fiquem assim : (sem os 3 primeiros caracteres)
201215090000000001.xml
201215090000000002.xml
201215090000000002.xml

Como eu posso fazer isso de forma simples mem modo texto ?
Muito obrigado!
Bruno
Mauriciodez
Mauriciodez Highlander Registrado
4.9K Mensagens 1.6K Curtidas
#2 Por Mauriciodez
15/09/2012 - 19:07
brunofp300 disse:
Boa tarde Pessoal,
Estou precisando fazer algo relativamente simples mas nao encontrei o comando para executar isso. Eu preciso renomear uns 400 mil arquivos, todos eles são compostos por 3 letras iniciais e 18 numeros. Eu preciso remover os 3 primeiros caracteres de todos esses arquivos.
Ex: os arquivos tem o seguintes nomes:
out201215090000000001.xml
out201215090000000002.xml
out201215090000000002.xml

Eu preciso que eles fiquem assim : (sem os 3 primeiros caracteres)
201215090000000001.xml
201215090000000002.xml
201215090000000002.xml

Como eu posso fazer isso de forma simples mem modo texto ?
Muito obrigado!
Bruno


v c te atende

http://www.vivaolinux.com.br/topico/UbuntuBR/Renomear-varios-arquivos-de-uma-vez


" Nem sempre é amigo aquele que te tira do buraco !!! ( Saddam Hussein )"
N0625
N0625 Super Zumbi Registrado
7.1K Mensagens 785 Curtidas
#3 Por N0625
15/09/2012 - 19:16
Cara, achei este link no VOL:

http://www.vivaolinux.com.br/topico/UbuntuBR/Renomear-varios-arquivos-de-uma-vez

E é interessante usar a ferramenta de renomear arquivos do Thunar.

Antes, PELAMORDEDEUS: testa antes com arquivos-cobaia. Ou use cópias dos arquivos originais. Desculpe se estou dando um alerta um tanto óbvio, mas alertas não são demais. Por exemplo, criei os arquivos no terminal:

$ touch abc001 abc002 abc003 abc004 abc005 abc006 abc007

Abra o Thunar ou então o aplicativo Renomear em massa que vem é instalado com ele (ou instalando só essa ferramenta conforme descrito no link) clique no + verde e selecione os arquivos que serão renomeados. No caso usei os arquivos abc criados acima. De volta à janela do programa, na caixa à esquerda selecione Remover caracteres. Na caixa à direita mantenha Apenas nome. Depois, ajuste o valor de Para posição. No exemplo ajustei para 3 para retirar o "abc" dos arquivos. Na janela tem o preview de como ficará após as mudanças. Ficou como deseja? Clique em Renomear arquivos. Pronto.

Este tópico serviu até para mim. ^^ Só falta saber como fazer isso pelo terminal.

Mauriciodez disse:
v c te atende

http://www.vivaolinux.com.br/topico/UbuntuBR/Renomear-varios-arquivos-de-uma-vez


Usamos a mesma fonte ao mesmo tempo, só que eu estava criando minha postagem baseada na funcionalidade do programa. :-p

cygnusx-1
cygnusx-1 Cyber Highlander Registrado
10K Mensagens 1.5K Curtidas
#4 Por cygnusx-1
15/09/2012 - 21:30
Tem esse programinha também.
GPRenamer
LG 23" IPS | Cooler Master Elite 370 | Gigabyte B85M-D3PH | i5-4670K (4x 3,4 GHz) + Cooler Master Hyper TX3 | 16 GiB DDR3 1600MHz | Asgard 1 TB + WD 1 TB + Seagate 2 TB | Gravador de Blu-ray LG WH14NS40 | Seasonic 430W
Derrubada do veto à auditoria da escravidão da dívida "pública"
“O maior perigo para a liberdade são os escravos felizes."
ivoaudio
ivoaudio Cyber Highlander Registrado
7.1K Mensagens 2.2K Curtidas
#5 Por ivoaudio
16/09/2012 - 00:12
Mil perdões por não "mastigar" a resposta, mas a pressa e o sono estão pegando... só deu para uma busca no Google, sem analisar os resultados.

Talvez adaptando algo assim:

http://www.vivaolinux.com.br/topico/Comandos/Renomear-varios-arquivos-simultaneamente-1

http://freepereira.wordpress.com/2011/12/16/renomear-diversos-arquivos-no-linux-shell-script/

https://3c0linux.wordpress.com/2008/08/25/um-shell-script-para-renomear-arquivos-em-massa/
Jazz rocks!
---
anderberin
anderberin Veterano Registrado
653 Mensagens 64 Curtidas
#6 Por anderberin
17/09/2012 - 15:22
retirando as três primeiras letras dos arquivos (funciona somente se os arquivos não possuírem espaços em seus nomes).

antes:
[code=rich]
[cpd@CPD-MAQ001 teste]$ ls -lh
total 0
-rw-r--r-- 1 cpd users 0 Set 17 15:12 abcArquivo0.txt
-rw-r--r-- 1 cpd users 0 Set 17 15:12 abcArquivo1.txt
-rw-r--r-- 1 cpd users 0 Set 17 15:12 abcArquivo2.txt
-rw-r--r-- 1 cpd users 0 Set 17 15:12 abcArquivo3.txt
-rw-r--r-- 1 cpd users 0 Set 17 15:12 abcArquivo4.txt
-rw-r--r-- 1 cpd users 0 Set 17 15:12 abcArquivo5.txt
-rw-r--r-- 1 cpd users 0 Set 17 15:12 abcArquivo6.txt
-rw-r--r-- 1 cpd users 0 Set 17 15:12 abcArquivo7.txt
-rw-r--r-- 1 cpd users 0 Set 17 15:12 abcArquivo8.txt
-rw-r--r-- 1 cpd users 0 Set 17 15:12 abcArquivo9.txt[/code]
comandos:
[code=rich]
for ARQ in *
do
mv -v $ARQ ${ARQ:3}
done[/code]
cria um laço com todo os arquivos do diretório atual (*), colocando esses nomes, um por vez, na variável "ARQ".
Para cada arquivo executa o comando "mv", movendo o arquivo "$ARQ" de modo que o nome final comece depois do 3º caractere: ${ARQ:3}

efeito:
[code=rich]
"abcArquivo0.txt" -> "Arquivo0.txt"
"abcArquivo1.txt" -> "Arquivo1.txt"
"abcArquivo2.txt" -> "Arquivo2.txt"
"abcArquivo3.txt" -> "Arquivo3.txt"
"abcArquivo4.txt" -> "Arquivo4.txt"
"abcArquivo5.txt" -> "Arquivo5.txt"
"abcArquivo6.txt" -> "Arquivo6.txt"
"abcArquivo7.txt" -> "Arquivo7.txt"
"abcArquivo8.txt" -> "Arquivo8.txt"
"abcArquivo9.txt" -> "Arquivo9.txt"[/code]
há várias formas de se fazer isso. Essa é uma delas.
if ( ($so == "linux") && (($distro == "slack") || ($distro == "arch")) ) {
faceiro.png

} else {
raivoso.png

}

/*Linux User: #375.090*/
Como fazer perguntas inteligentes
selvaking
selvaking Super Participante Registrado
300 Mensagens 39 Curtidas
#7 Por selvaking
17/09/2012 - 15:23
Como eu adoro estes desafios em script, pensei em algo simples mas funcional.

#!/bin/bash
######## ~/bin/script69.sh ##############
for file in $( ls | grep "?????????????????????\.xml" ); do xfile=$(echo ${file} | cut -c4-) && mv ${file} ${xfile} && echo $xfile; done;


Se vc quiser testar este script, salve ele numa pasta vazia, crie alguns arquivos fictícios e execute ele na pasta. Como os seus arquivos possuem um tamanho padrão, eu só fiz remover as 3 primeiras letras.

Veja no laboratório montado abaixo que o arquivo funcionou.
usuario@machine:~$ touch out20121509000000000{1,2,3}.xml
usuario@machine:~$ ls | grep "\.xml"
out201215090000000001.xml
out201215090000000002.xml
out201215090000000003.xml
usuario@machine:~$ bash ~/bin/script69.sh
201215090000000001.xml
201215090000000002.xml
201215090000000003.xml
usuario@machine:~$ ls | grep "\.xml"
201215090000000001.xml
201215090000000002.xml
201215090000000003.xml
Dê-me o Tux e um computador que movo o mundo! .
ivoaudio
ivoaudio Cyber Highlander Registrado
7.1K Mensagens 2.2K Curtidas
#8 Por ivoaudio
17/09/2012 - 15:38
brunofp300 disse:

Ex: os arquivos tem o seguintes nomes:
out201215090000000001.xml
out201215090000000002.xml
out201215090000000002.xml


Eu preciso que eles fiquem assim : (sem os 3 primeiros caracteres)
201215090000000001.xml
201215090000000002.xml
201215090000000002.xml


Opa!

Agora percebi: tem erro de digitação aí, pois não é possível a ocorrência de arquivos com nomes iguais no mesmo diretório.
Jazz rocks!
---
¥ YURI ¥
¥ YURI ¥ Super Participante Registrado
415 Mensagens 21 Curtidas
#12 Por ¥ YURI ¥
21/09/2012 - 15:21
Caros, encontrei uma forma um pouco mais simples, eu acho... nada de script. Basta um único comando: (o que tá em vermelho)

┌── yuri@VirtualBox ─ 14:55:39 ~/ambiente
└─$─┤▶ ls
out201209001.txt out201209004.txt out201209007.txt
out201209002.txt out201209005.txt out201209008.txt
out201209003.txt out201209006.txt out201209009.txt
┌── yuri@VirtualBox ─ 14:55:56 ~/ambiente
└─$─┤▶ rename -n 's/out//g' *.txt
out201209001.txt renamed as 201209001.txt
out201209002.txt renamed as 201209002.txt
out201209003.txt renamed as 201209003.txt
out201209004.txt renamed as 201209004.txt
out201209005.txt renamed as 201209005.txt
out201209006.txt renamed as 201209006.txt
out201209007.txt renamed as 201209007.txt
out201209008.txt renamed as 201209008.txt
out201209009.txt renamed as 201209009.txt
┌── yuri@VirtualBox ─ 14:56:00 ~/ambiente

***************
A opção -n do rename faz só uma simulação, não altera nada. Pra alterar basta tirar o -n.
Explicando o restante:
rename -n 's/out//g' *.txt

's/out//g' - é uma expressão perl. Não tem a ver com o rename. Gostaria de me aprofundar mais nisso, mas tá difícil achar e entender. Sei só que
'.......' - aspas simples tem que ter no início e no final,
assim como as barras indicando o primeiro intervalo o que quer substituir (no caso o "out", e o segundo intervalo pelo que quer substituir (no caso "", NADA! Não tem nada entre a segunda e a terceira barra)
s - modo substituição
g - global, faz em todos os arquivo que batem com o padrão...
*.txt - o padrão a ser localizado. (isso faz parte do rename)

MAS... eu estou aí fazendo um padrão fixo pra substituição, o "out", e se ele tiver set, nov, dez, etc...?
Aí eu consegui isso:

rename -n 's/^...//g' *.txt
out201209001.txt renamed as 201209001.txt
out201209002.txt renamed as 201209002.txt
out201209003.txt renamed as 201209003.txt
out201209004.txt renamed as 201209004.txt
out201209005.txt renamed as 201209005.txt
out201209006.txt renamed as 201209006.txt
out201209007.txt renamed as 201209007.txt
out201209008.txt renamed as 201209008.txt
out201209009.txt renamed as 201209009.txt


O ^... quer dizer o que inicia (^) com 3 caracteres quaisquer (...). Não é reticências. Se quisesse 5 caracteres iniciais seria ^..... ok?
Tendeu?
^ no início pra indicar o início
$ no final pra indicar... o Final! Ex: rename -v ’s/\.htm$/\.html/’ *.htm (a contra-barra '\' diz que é pra interpretar o caracter seguinte como literal, o seu real significado, no caso como ponto mesmo, e não como caracter qualquer)
. um caracter qualquer
* um ou mais caracteres


Mais aqui:
http://tips.webdesign10.com/how-to-bulk-rename-files-in-linux-in-the-terminal
http://www.cs.tut.fi/~jkorpela/perl/regexp.html


Aqui deu tudo certo.
Abraço!
|||||||||
A vida é feita de escolhas..arkGreen">legal.pngarkOrange">
MarcosMamoru
MarcosMamoru Super Participante Registrado
743 Mensagens 8 Curtidas
#14 Por MarcosMamoru
25/09/2012 - 16:14
¥ YURI ¥ disse:
g - global, faz em todos os arquivo que batem com o padrão...


Na verdade o g indica que a substituição deve ocorrer em todo o nome do arquivo, como exemplo fiz um teste rápido com uma lista de nomes de arquivo aonde quero trocar o a pelo A.

Sem o g:

$ rename 's/a/A/' * -v
aaa1 renamed as Aaa1
aaaab renamed as Aaaab
aaab renamed as Aaab
aaadke renamed as Aaadke
aakdd renamed as Aakdd


O rename apenas substitui o primeiro a e ignora o restante.

com o g:


$ rename 's/a/A/g' * -v
aaa1 renamed as AAA1
aaaab renamed as AAAAb
aaab renamed as AAAb
aaadke renamed as AAAdke
aakdd renamed as AAkdd


O rename continua a trocar o a pelo A até o último a.

Como dica pra aprender expressões regulares sugiro o site:

http://aurelio.net/regex/
© 1999-2024 Hardware.com.br. Todos os direitos reservados.
Imagem do Modal