Duvida ao renomear arquivo [RESOLVIDO]

1. Duvida ao renomear arquivo [RESOLVIDO]

Lincoln Oliveira de Souza
lincolnsol

(usa Fedora)

Enviado em 07/10/2009 - 11:10h

Oi denovo pessoal do forum !

Venho ate vcs hj para pedir ajuda pra renomear uns arquivos(todos dentro da mesma pasta), sei que parece facil mas estou tendo dificuldade.

Todos os arquivos temo nome com a seguinte disposição:
string1_string2_string3_string4_string5_string6_string7_string8_string9_string10_string11.txt
e eu preciso que fique assim:
string1_string3_string4_string11_string10_string9_string8.txt

pensei em fazer da seguinte forma:
---------------------------------
nome_velho=$(ls)
string1=$(ls | cut -d"_" -f1 )
string3=$(ls | cut -d"_" -f3)
string4=$(ls | cut -d"_" -f4)
string11=$(ls | cut -d"_" -f11 | cut -d"." -f1)
string10=$(ls | cut -d"_" -f10)
string9=$(ls | cut -d"_" -f9)
string8=$(ls | cut -d"_" -f9)
nome_novo=$(echo $nome $nome2 $ano $mes $dia.txt)
mv "$nome_velho" "$(echo $nome_velho | sed "s/$nome_velho/$nome_novo/")"
---------------------------------

mas alem de não ficar bom eu preciso de um jeito que renomeie todos os arquivos da pasta(+ de 3000)



  


2. Re: Duvida ao renomear arquivo [RESOLVIDO]

Perfil removido
removido

(usa Nenhuma)

Enviado em 07/10/2009 - 11:46h

{{{
nome_novo=$(echo $nome $nome2 $ano $mes $dia.txt)
mv "$nome_velho" "$(echo $nome_velho | sed "s/$nome_velho/$nome_novo/")"
}}}

isso ai nao tem base.
explica melhor o que quer. mostre um trecho do seu ls e vc precisa por dentro dum laço for ou while.

alem do que: mostra um exemplo real do nome atual e um do nome novo.



3. Re: Duvida ao renomear arquivo [RESOLVIDO]

Lincoln Oliveira de Souza
lincolnsol

(usa Fedora)

Enviado em 07/10/2009 - 12:04h

é que quando eu comecei a tentar fazer eu só tinha um arquivo dentro da pasta ,por isso eu pensei em usar o "nome_velho=$(ls)" pra guardar em uma variavel o nome velho do arquivo,e como cut montar o nome novo.

mas quando vi que tinha q fazer funcionar em uma pasta com mais de 3000 arquivos foi que eu vi que eu não sabia como fazer


4. Script

Daniel Fernandes
volcom

(usa Debian)

Enviado em 07/10/2009 - 12:18h

Pode ser que ajude, com algumas adaptações:

Colaboração: Otávio Penatti

Já houve várias vezes em que precisei renomear vários arquivos
de uma só vez e nos quais havia um certo padrão em seus
nomes. Acredito que isto também já tenho ocorrido com muita
gente além de mim.

Os arquivos tinham, por exemplo, o texto "-www.unicamp.br-"
no nome e eu queria tirar esse pedaço de texto do nome dos
arquivos ou então substituí-lo por algum outro texto.

Com o script abaixo foi possível fazer isso de forma simples:


#!/bin/bash

criterio=$1
antigo=$2
novo=$3

if [ $# -lt 3 ] ; then
echo "modo de usar: renomeia [criterio] [texto_a_ser_substituido] [texto_substituto]"
exit 0
fi

for arq in *$criterio*
do
mv "$arq" "$(echo $arq | sed "s/$antigo/$novo/")"
done


O laço "for" varre os arquivos do diretório atual baseado em
um critério. Por exemplo, se quiser renomear os arquivos JPG
do diretório, basta usar "jpg" como critério. Ou, se quiser
renomear os arquivos que contenham "foto-" no nome, basta usar
"foto-" como critério.

O parâmetro "antigo" é o texto que será substituído no nome
do arquivo, como, por exemplo, "-www.unicamp.br-".

O parâmetro "novo" é o texto substituto, que será colocado
no lugar do texto antigo. Se for vazio, basta usar ''
(aspas simples).

Um detalhe importante no script são as aspas no comando:


mv "$arq" "$(echo $arq | sed "s/$antigo/$novo/")"


Se as aspas não é possível renomear arquivos que contenham
espaços no nome.

O script usa o sed para fazer a troca dos nomes e como o sed
aceita expressões regulares, fica fácil fazer substituições
de texto mais complexas.

Um exemplo de uso do script seria:


./renomeia jpg foto- ''


No exemplo, todos os arquivos que tenham jpg (no nome ou
extensão) terão o texto "foto-" retirado do nome.

Otávio Penatti (http://otavio.penatti.com)

Lembrando mais uma vez que todos os direitos são do Otávio ;)

Abraço


5. Re: Duvida ao renomear arquivo [RESOLVIDO]

Lincoln Oliveira de Souza
lincolnsol

(usa Fedora)

Enviado em 07/10/2009 - 17:18h

parece q consegui resolver o problema

o script joga o arquivo para uma outra pasta(temp) e lá eu consegui fazer o esquema de usar o "ls" e o "cut" para montar o novo nome do arquivo, depois eu movo o arquivo para uma pasta definitiva.

mas ainda tenho um problema:
Parte do nome do arquivo é uma data, e eu preciso que nolugar do nome do mes apareça o numero do mês (Dez=12, Jan=01).

E é esse o problema eu fiz assim :
if [ $mes == Jan ]; then
mes=$((01))
fi
.
.
.
if [ $mes == Dez ]; then
mes=$((12))
fi

mas o resultado para os messes de janeiro(01) a setembro(09) ao invez de ser "01" ou "02" estão sendo "1", "2" e assim por diante ...

Como eu faço para o resultado da variavel passar a tem esse zero na frente ?


6. Re: Duvida ao renomear arquivo [RESOLVIDO]

Lincoln Oliveira de Souza
lincolnsol

(usa Fedora)

Enviado em 07/10/2009 - 17:46h

resolvido:

mudei os if dos messes cujo respectivo numere émenos que 10 para:
------------------------
zero=0
if [ $mes == Jun ]; then
mes=$((06))
mes=$zero$mes
------------------------

Pode nãoser muito elegante, mas resolveu


7. Re: Duvida ao renomear arquivo [RESOLVIDO]

DAVISON MARCEL PASQUALINI
fdmarp

(usa Debian)

Enviado em 07/10/2009 - 20:00h

Sem complicações:
mes="01"
mes="02"






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts