Renomear arquivos em lote numerando-os de forma descendente [RESOLVIDO]

1. Renomear arquivos em lote numerando-os de forma descendente [RESOLVIDO]

Jose Carlos Nazara
zenazara

(usa Debian)

Enviado em 20/10/2019 - 23:21h

Salve galera do VOL!
Preciso renomear arquivos em lote numerando-os de forma descendente, i. é, numa pasta com dez arquivos em que o arquivo com nome "arquivo.0001.png" passe a chamar-se "arquivo.0010.png", estendendo essa alteração a toda ordem da lista.
Posso justificar melhor a necessidade disso se ajudar, pois trata-se de preparar sequência de imagens para animação.
Desde de já agradeço a quem puder ajudar.


  


2. Re: Renomear arquivos em lote numerando-os de forma descendente

Ryuk Shinigami
Ryuk

(usa Nenhuma)

Enviado em 21/10/2019 - 10:07h

Faça um teste aí:
#!/bin/bash

pasta="/pasta/imagens"
ext="png"
n="1"
IFSOLD=$IFS
IFS=$'\n'
for arq in `ls -1 -v -r $pasta/*.$ext` ; do
nome="${arq%%.*}.$(printf "%04d" $n).renomeado"
mv -i -v "$arq" "${nome}.$ext"
let n++
done
IFS=$IFSOLD


Obs.: Antes de rodar o script faça backup dos arquivos originais!!!


3. Re: Renomear arquivos em lote numerando-os de forma descendente

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 21/10/2019 - 23:44h

zenazara escreveu:

Salve galera do VOL!
Preciso renomear arquivos em lote numerando-os de forma descendente, i. é, numa pasta com dez arquivos em que o arquivo com nome "arquivo.0001.png" passe a chamar-se "arquivo.0010.png", estendendo essa alteração a toda ordem da lista.
Posso justificar melhor a necessidade disso se ajudar, pois trata-se de preparar sequência de imagens para animação.
Desde de já agradeço a quem puder ajudar.

Boa noite zenazara.
Segue sugestão:
dir_temp=Dir_Temp;mkdir $dir_temp;
#Para Testar, exclua "|bash" da linha abaixo.
ls -1 DIRETÓRIO_ORIGEM/*.png|awk -F"." '{printf "mv %s %s.%04d.%s\n" ,$0,"'${dir_temp}'/arquivo",(11-NR),$3}'|bash
cp $(ls -1 ${dir_temp}*.png|xargs) DIRETÓRIO_ORIGEM/;

Obs.: Altere "DIRETÓRIO_ORIGEM" para o diretório onde estão seus arquivos.

Importante: echo -e "$(lynx --dump goo.gl/a9KeFc|sed -nr '/^[ ]+Se/,/dou.$/p')"
Att.: Marcelo Oliver
____________________________________________________
____________________________________________________

Ryuk boa noite,
pelo que observei no seu script, se "der sim", perde a metade, do 0001 ao 0005
mv -i -v Documentos/arquivo.0010.txt Documentos/arquivo.0001.txt
mv: sobrescrever 'Documentos/arquivo.0001.txt'?

____________________________________________________
____________________________________________________



4. Re: Renomear arquivos em lote numerando-os de forma descendente [RESOLVIDO]

Jose Carlos Nazara
zenazara

(usa Debian)

Enviado em 21/10/2019 - 23:50h

Caro Ryuk,
Funcionou perfeitamente! Muito obrigado a vc e a comunidade!
Olhei o script e inicialmente não sabia como utilizá-lo...rs. Fui me informando pelo fórum e de quebra aprendi a como executar scripts. Se tiver uma dica de um bom artigo para iniciar no aprendizado de scripts, tô aceitando!
Me quebrou um baita galho, pois imagine toda uma sequência de animação produzida que não dava para salvar na ordem certa, só de trás pra frente...rs.
Valeu!


5. Re: Renomear arquivos em lote numerando-os de forma descendente [RESOLVIDO]

Jose Carlos Nazara
zenazara

(usa Debian)

Enviado em 21/10/2019 - 23:58h

Caro MSOLIVER,
Obrigado pelo interesse e disposição.
Certamente irei experimentar sua sugestão, pois é sempre bom ter mais caminhos para resolução.
Assim que testar sua sugestão, mando o retorno diretamente a vc meu caro, e quem sabe integro a orientação do Ryuk e a sua numa dica a ser publicada aqui. Por hora, muito obrigado tb!


6. Re: Renomear arquivos em lote numerando-os de forma descendente [RESOLVIDO]

Ryuk Shinigami
Ryuk

(usa Nenhuma)

Enviado em 22/10/2019 - 09:39h

msoliver escreveu:

Ryuk boa noite,
pelo que observei no seu script, se "der sim", perde a metade, do 0001 ao 0005
mv -i -v Documentos/arquivo.0010.txt Documentos/arquivo.0001.txt
mv: sobrescrever 'Documentos/arquivo.0001.txt'?



Verdade ;)
Copiar para outra pasta é mais seguro!
Segue outra versão do script:
#!/bin/bash
# Renomeia os arquivos numerando-os em ordem inversa.

pasta_origem="/tmp/pasta"
ext="png"

pasta_destino="${pasta_origem}/renomeados"
if [ ! -d ${pasta_destino} ]; then
mkdir "${pasta_destino}"
fi

n="1"
IFSOLD=$IFS
IFS=$'\n'

for arq in `ls -1 -v -r ${pasta_origem}/*.${ext}` ; do
nome="${arq%%.*}.$(printf "%04d" $n)"
cp -i -v "${arq}" "${pasta_destino}/$(basename ${nome}).${ext}"
let n++
done

IFS=$IFSOLD







Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts