Alterar o nome de arquivos - SHELL SCRIPT

1. Alterar o nome de arquivos - SHELL SCRIPT

Jvictor
jvictor88

(usa Kali)

Enviado em 09/03/2018 - 10:42h

Pessoal,
estou tentando renomear vários arquivos de fotos que possuem o padrão IMGXXXX, gostaria de renomear todos eles para um padrão tipo foto(1), foto(2), foto(3), foto(4).

Eu consegui usar o seguinte:
ls * | awk 'BEGIN{ a=0 }{ printf "mv %s myfotos_%04d\n", $0, a++ }' | bash

Eu executo este comando dentro do diretório onde estão as fotos.

Mas ainda assim não é o que eu preciso, porque com o comando acima, eu renomeio todos os arquivos que estão no diretório para o formato: "myfotos_0000 myfotos_0001 myfotos_0002 myfotos_0003 myfotos_0004 myfotos_0005 myfotos_0006 myfotos_0007"

O que eu gostaria de fazer é, todas as fotos que possuam o padrão "IMGXXXX1", "IMGXXXX2", "IMGXXXX3", "IMGXXX4", mudem para "foto(1).jpg", "foto(2).jpg", "foto(3).jpg", "foto(4).jpg".

Alguém tem uma ideia de como posso fazer isso?



  


2. Re: Alterar o nome de arquivos - SHELL SCRIPT

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 09/03/2018 - 16:49h

jvictor88 escreveu:

Pessoal,
estou tentando renomear vários arquivos de fotos que possuem o padrão IMGXXXX, gostaria de renomear todos eles para um padrão tipo foto(1), foto(2), foto(3), foto(4).

Eu consegui usar o seguinte:
ls * | awk 'BEGIN{ a=0 }{ printf "mv %s myfotos_%04d\n", $0, a++ }' | bash

Eu executo este comando dentro do diretório onde estão as fotos.

Mas ainda assim não é o que eu preciso, porque com o comando acima, eu renomeio todos os arquivos que estão no diretório para o formato: "myfotos_0000 myfotos_0001 myfotos_0002 myfotos_0003 myfotos_0004 myfotos_0005 myfotos_0006 myfotos_0007"

O que eu gostaria de fazer é, todas as fotos que possuam o padrão "IMGXXXX1", "IMGXXXX2", "IMGXXXX3", "IMGXXX4", mudem para "foto(1).jpg", "foto(2).jpg", "foto(3).jpg", "foto(4).jpg".

Alguém tem uma ideia de como posso fazer isso?


Boa tarde Victor.
IMGXXXX1, quais caracteres existem no lugar dos "X", são "X" mesmo?
Qual a extensão atual, jpg?

Bem, se os "X" forem X mesmo e a extensão atual jpg, o comando abaixo resolve:
rename -n 's/^IMG([X]+)([[:alnum:]]+)/FOTO\($2\)/' *.jpg
O parâmetro -n simula, para alterar execute:
rename 's/^IMG([X]+)([[:alnum:]]+)/FOTO\($2\)/' *.jpg

Marcelo Oliver



3. Re: Alterar o nome de arquivos - SHELL SCRIPT

Jvictor
jvictor88

(usa Kali)

Enviado em 09/03/2018 - 17:04h

Opa tudo bem Marcelo?

Obrigado pela resposta.

Então, os "X" não são caracteres que se repetem, eles mudam. Mas todos os arquivos começam com "IMG".

Att,
João Victor


4. Re: Alterar o nome de arquivos - SHELL SCRIPT

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 09/03/2018 - 17:13h

jvictor88 escreveu:

Opa tudo bem Marcelo?

Obrigado pela resposta.

Então, os "X" não são caracteres que se repetem, eles mudam. Mas todos os arquivos começam com "IMG".

Att,
João Victor


Os "X" são letras ?
Maiúscula ou minuscula...
As perguntas são necessárias para montar a expressão regular...
msoliver


5. Re: Alterar o nome de arquivos - SHELL SCRIPT

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 09/03/2018 - 17:20h

Victor, teste o comando:
rename -n 's/^IMG([A-Za-z]+)([0-9]+)/FOTO\($2\)/' *.jpg
Se a saída for satisfatória, execute:
rename 's/^IMG([A-Za-z]+)([0-9]+)/FOTO\($2\)/' *.jpg

Att.:
Marcelo Oliver



6. Re: Alterar o nome de arquivos - SHELL SCRIPT

Jvictor
jvictor88

(usa Kali)

Enviado em 09/03/2018 - 17:31h

Marcelo,
a nomenclatura dos arquivos muda, pois vem de várias fontes, como celulares e tablets, além de whatsapp.

Então, o padrão de nome "IMGXXXX" é só um exemplo.

A necessidade é que todos os arquivos de um diretório seja renomeado para o padrão descrito como de "IMGXXX.jpg" para "fotos(1).jpg", "fotos(2).jpg" etc...

O mais próximo que cheguei foi o LS que eu mandei na primeira mensagem do tópico.

Um padrão comum entre os arquivos, é a extensão que usa .JPG e/ou JPEG, ainda assim, são duas opções né :/

Obrigado pela resposta :)

João Victor


8. Re: Alterar o nome de arquivos - SHELL SCRIPT

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 09/03/2018 - 23:28h

jvictor88 escreveu:

Marcelo,
a nomenclatura dos arquivos muda, pois vem de várias fontes, como celulares e tablets, além de whatsapp.

Então, o padrão de nome "IMGXXXX" é só um exemplo.

A necessidade é que todos os arquivos de um diretório seja renomeado para o padrão descrito como de "IMGXXX.jpg" para "fotos(1).jpg", "fotos(2).jpg" etc...

O mais próximo que cheguei foi o LS que eu mandei na primeira mensagem do tópico.

Um padrão comum entre os arquivos, é a extensão que usa .JPG e/ou JPEG, ainda assim, são duas opções né :/

Obrigado pela resposta :)

João Victor


Vamos lá Victor.
Estou com dificuldades para entender o "padrão".
Considerei o "padrão" como:
Começa com IMG
Tem mais quatro letras, que podem ser Maiúscula ou minuscula
E a extensão pode ser JPEG ou jpg.
-------------------------------------------------------
Tenho os seguintes arquivos:
ls -1 *.* 

IMGbAwO.JPEG
IMGbzsU.jpg
IMGhHqP.JPEG
IMGJByT.JPEG
IMGkmrV.jpg
IMGkrnM.JPEG
IMGmKSt.JPEG
IMGpXAk.jpg
IMGRCgK.jpg
IMGtOln.JPEG
IMGuMJH.jpg
IMGUwQN.jpg

Após o comando:
N=0;for ARQ in $(ls -1 *.{JPEG,jpg});do EXT=$(sed -r 's/IMG[[:alpha:]]{4}//' <<< "$ARQ");let N++;rename 's/'${ARQ}'/foto\('${N}\)${EXT}'/' ${ARQ};done 

Tenho:
ls -1 *.* 

foto(10).JPEG
foto(11).jpg
foto(12).jpg
foto(1).JPEG
foto(2).jpg
foto(3).JPEG
foto(4).JPEG
foto(5).jpg
foto(6).JPEG
foto(7).JPEG
foto(8).jpg
foto(9).jpg

OBS.: Use rename -n para testar, certificando que é o que precisa, tire o "-n" e rode o comando novamente.
É isso.

Marcelo Oliver







Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts