Renomear arquivos

1. Renomear arquivos

Anderson Filipe Vieira
anderson0504

(usa Fedora)

Enviado em 19/07/2014 - 01:55h

olá

Meu Problema é o seguinte:
Tenho uma sequencia de arquivos e preciso renomear de acordo com as informações de dentro dele ex:

Arquivo AMEX_140630_102952
Preciso renomea-lo da seguinte forma:
AMEX_BISTEK_Data que esta na primeira linha_código que esta na primeira linha.TXT

Todos os outros arquivos precisam ser renomedos com estas informações também e seguem o mesmo padrão

Primeria linha do arquivo entre parenteses as informações que preciso vincular ao nome do arquivo:

9911960318,00010101,000000,0000000000,00000,0,0,(20140628),040103,00(0026),EXTRATO ELETR AMEX

Teria algum scipt para manipular desta maneira estes arquivos?

Conto com a ajuda de voces!

Abraço.


  


2. Re: Renomear arquivos

Luis R. C. Silva
luisrcs

(usa Linux Mint)

Enviado em 19/07/2014 - 07:34h

Desculpe, mas não entendi nada. Escreva mais detalhes e de forma coerente.


3. Re: Renomear arquivos

Estefanio Brunhara
stefaniobrunhara

(usa CentOS)

Enviado em 19/07/2014 - 12:10h

anderson0504 escreveu:

olá

Meu Problema é o seguinte:
Tenho uma sequencia de arquivos e preciso renomear de acordo com as informações de dentro dele ex:

Arquivo AMEX_140630_102952
Preciso renomea-lo da seguinte forma:
AMEX_BISTEK_Data que esta na primeira linha_código que esta na primeira linha.TXT

Todos os outros arquivos precisam ser renomedos com estas informações também e seguem o mesmo padrão

Primeria linha do arquivo entre parenteses as informações que preciso vincular ao nome do arquivo:

9911960318,00010101,000000,0000000000,00000,0,0,(20140628),040103,00(0026),EXTRATO ELETR AMEX

Teria algum scipt para manipular desta maneira estes arquivos?

Conto com a ajuda de voces!

Abraço.


NAO ENTENDI ISTO!


Preciso renomea-lo da seguinte forma:
AMEX_BISTEK_Data que esta na primeira linha_código que esta na primeira linha.TXT


Supondo que isto é um prefixo do nome com AMEX_BISTEK_DATA_HORA + PARÊNTES

supondo que a primeira linha do arquivo seja isto!

9911960318,00010101,000000,0000000000,00000,0,0,(20140628),040103,00(0026),EXTRATO ELETR AMEX


vim TrocaNome.sh

#!/bin/bash

# Lista todos os arquivos do diretório e joga para variável ARQ_NOME_VELHO
for ARQ_NOME_VELHO in $(ls); do

PREFIXO_P1=$(echo $ARQ_NOME_VELHO|cut -d \_ -f1)
PREFIXO_P2=$(echo $ARQ_NOME_VELHO|cut -d \_ -f2)
PREFIXO_P3=$(echo $ARQ_NOME_VELHO|cut -d \_ -f3)

# Ler a primeira linha do arquivo ARQ_NOME_VELHO e armazena em NOME_ARQ
NOME_ARQ=$(head -1 $ARQ_NOME_VELHO)

# Ler parte do nome depois do parêntese (
PART_NOME=$(echo $NOME_ARQ |cut -d \( -f2)
PART_NOME1=$(echo $PART_NOME|cut -d \) -f1)

# Ler parte do nome antes do parêntese )
PART_NOME=$(echo $NOME_ARQ |cut -d \( -f3)
PART_NOME2=$(echo $PART_NOME|cut -d \) -f1)

# Listando nome novo do arquivos
echo $PREFIXO_P1"_BISTEK_"$PREFIXO_P2"_"$PREFIXO_P3"_"$PART_NOME1"_"$PART_NOME2

# Mover o nome velho para o nome novo
mv $ARQ_NOME_VELHO $PREFIXO_P1"_BISTEK_"$PREFIXO_P2"_"$PREFIXO_P3"_"$PART_NOME1"_"$PART_NOME2

done

# Dar pemissão
chmod +x TrocaNome.sh

# Executar o script
./TrocaNome

Faça bkp kkk




4. Nao renomeia

Anderson Filipe Vieira
Anderson0504

(usa Fedora)

Enviado em 19/07/2014 - 19:59h

Olá,
Não sei se executei no lugar correto mais fiz apartir do lugar que está o arquivo e aconteceu o seguinte:


[Anderson@Anderson Downloads]$ vim TrocaNome.sh
bash: vim: Comando não encontrado...
[Anderson@Anderson Downloads]$
[Anderson@Anderson Downloads]$ #!/bin/bash
[Anderson@Anderson Downloads]$
[Anderson@Anderson Downloads]$ # Lista todos os arquivos do diretório e joga para variável ARQ_NOME_VELHO
[Anderson@Anderson Downloads]$ for ARQ_NOME_VELHO in $(ls); do
>
> PREFIXO_P1=$(echo $ARQ_NOME_VELHO|cut -d \_ -f1)
> PREFIXO_P2=$(echo $ARQ_NOME_VELHO|cut -d \_ -f2)
> PREFIXO_P3=$(echo $ARQ_NOME_VELHO|cut -d \_ -f3)
>
> # Ler a primeira linha do arquivo ARQ_NOME_VELHO e armazena em NOME_ARQ
> NOME_ARQ=$(head -1 $ARQ_NOME_VELHO)
>
> # Ler parte do nome depois do parêntese (
> PART_NOME=$(echo $NOME_ARQ |cut -d \( -f2)
> PART_NOME1=$(echo $PART_NOME|cut -d \) -f1)
>
> # Ler parte do nome antes do parêntese )
> PART_NOME=$(echo $NOME_ARQ |cut -d \( -f3)
> PART_NOME2=$(echo $PART_NOME|cut -d \) -f1)
>
> # Listando nome novo do arquivos
> echo $PREFIXO_P1"_BISTEK_"$PREFIXO_P2"_"$PREFIXO_P3"_"$PART_NOME1"_"$PART_NOME2
>
> # Mover o nome velho para o nome novo
> mv $ARQ_NOME_VELHO $PREFIXO_P1"_BISTEK_"$PREFIXO_P2"_"$PREFIXO_P3"_"$PART_NOME1"_"$PART_NOME2
>
> done
_9911960318,00010101,000000,0000000000,00000,0,0,20140628,040103,000026,EXTRATO ELETR AMEX103,000026,EXTRATO ELETR AMEX
mv: o alvo “AMEX\r” não é um diretório
_9911960318,00010101,000000,0000000000,00000,0,0,20140628,040103,000026,EXTRATO ELETR AMEX0103,000026,EXTRATO ELETR AMEX
mv: o alvo “AMEX\r” não é um diretório
[Anderson@Anderson Downloads]$
[Anderson@Anderson Downloads]$ # Dar pemissão
[Anderson@Anderson Downloads]$ chmod +x TrocaNome.sh
chmod: não é possível acessar “TrocaNome.sh”: Arquivo ou diretório não encontrado
[Anderson@Anderson Downloads]$
[Anderson@Anderson Downloads]$ # Executar o script
[Anderson@Anderson Downloads]$ ./TrocaNome
bash: ./TrocaNome: Arquivo ou diretório não encontrado
[Anderson@Anderson Downloads]$ ^C
[Anderson@Anderson Downloads]$

Obs:o parenteses era apenas para identificar onde exatamente estava as informações que precisavam ser incluidas no nome do arquivo.
Peço descupas se fiz algo de errado,Mais nesta parte de script não intendo nada.
Poderia me explicar onde exatamente devo deixar o arquivo e de que forma devo executar o script.


5. Re: Renomear arquivos

Fernando
phoemur

(usa Debian)

Enviado em 19/07/2014 - 22:35h

Lá vai meu oneliner gambiarra, o vulgo "comandaço":


find . -type f -iname "AMEX*" | while read FILE; do mv "$FILE" "AMEX_BISTEK_$(sed -n '1s/^.*(\([0-9]\+\).*(\([0-9]\+\).*$/\1_\2/p' < "$FILE").TXT";done


Veja o funcionamento:

phoemur ~/teste $ ls -w1
AMEX_140630_102952
AMEX_140630_102953

phoemur ~/teste $ find . -type f -iname "AMEX*" | while read FILE; do mv "$FILE" "AMEX_BISTEK_$(sed -n '1s/^.*(\([0-9]\+\).*(\([0-9]\+\).*$/\1_\2/p' < "$FILE").TXT";done

phoemur ~/teste $ ls -w1
AMEX_BISTEK_20140628_0026.TXT
AMEX_BISTEK_20140628_0027.TXT


Só fiquei na dúvida do formato da data que você queria, aqui eu mantive AAAAMMDD que é o que estava no seu exemplo


6. Re: Renomear arquivos

Fernando
phoemur

(usa Debian)

Enviado em 19/07/2014 - 22:58h

Esse script em python que eu fiz faz o trabalho de forma mais inteligível se quiser:


#!/usr/bin/env python

import glob
import shutil
import re

pattern = re.compile('\(([0-9]+)\)')

for file in glob.glob('AMEX*'):
with open(file, mode='r') as fh:
content = fh.readlines()[0]
data, codigo = pattern.findall(content)

shutil.move(file, 'AMEX_BISTEK_{}_{}.TXT'.format(data, codigo))



7. re:renomear arquivos

Anderson Filipe Vieira
anderson0504

(usa Fedora)

Enviado em 21/07/2014 - 02:19h

olá phoemur,

Pelo que vejo até aqui está funcionando :) ,porém o primeiro que me passou esta renomeando o arquivo da seguinte maneira> AMEX_BISTEK_.TXT e quando coloco outros arquivos do mesmo tipo juntos
são deletados e fica apenas um.o segundo script testei porém não funcionou :/.
Preciso renomear com a data e codigo que estão dentro do arquivo,conforme havia citado anteriormente e não seria apenas um arquivo e sim varios mais com o mesmo nome e padrão para renomear.
Fico no aguardo
Valeu!


8. Re: Renomear arquivos

Estefanio Brunhara
stefaniobrunhara

(usa CentOS)

Enviado em 21/07/2014 - 12:55h

Anderson0504 escreveu:

Olá,
Não sei se executei no lugar correto mais fiz apartir do lugar que está o arquivo e aconteceu o seguinte:


[Anderson@Anderson Downloads]$ vim TrocaNome.sh
bash: vim: Comando não encontrado...



o vim é um editor de arquivos texto, pelo jeito você não tem ele instalado, você pode usar outro editor, por exemplo: pico, mcedit, vi etc...

Qual editor você sabe usar?



[Anderson@Anderson Downloads]$ chmod +x TrocaNome.sh
chmod: não é possível acessar “TrocaNome.sh”: Arquivo ou diretório não encontrado


[Anderson@Anderson Downloads]$ ./TrocaNome
bash: ./TrocaNome: Arquivo ou diretório não encontrado


Os erros acima são consequência do primeiro erro, você não tem o vim!







9. Re:renomear arquivos

Anderson Filipe Vieira
anderson0504

(usa Fedora)

Enviado em 22/07/2014 - 03:11h

Olá

Utilizo o "vi" mesmo,porém também não funcionou desta maneira.

O script passado anteriormente pelo phoemur foi o que mais deu certo;

find . -type f -iname "AMEX*" | while read FILE; do mv "$FILE" "AMEX_BISTEK_$(sed -n '1s/^.*(\([0-9]\+\).*(\([0-9]\+\).*$/\1_\2/p' < "$FILE").TXT";done

Porém esta renomeando o arquivo da seguinte maneira> AMEX_BISTEK_.TXT e quando coloco outros arquivos do mesmo tipo juntos
são deletados e fica apenas um.

Preciso renomear com a data e codigo que estão dentro do arquivo,conforme havia citado anteriormente e não seria apenas um arquivo e sim varios mais com o mesmo nome e padrão para renomear.
se puder me ajudar a dar continuidade neste eu agradeço.



10. Re: Renomear arquivos

Estefanio Brunhara
stefaniobrunhara

(usa CentOS)

Enviado em 22/07/2014 - 15:38h

veja aqui deu certo! talvez a primeria linha não seja como você acha que é!






[root@ns0 teste]# l
total 16
drwxr-xr-x. 2 root root 4096 Jul 22 15:37 ./
drwx------. 12 estf estf 4096 Jul 22 15:35 ../
-rw-r--r--. 1 root root 94 Jul 19 12:12 AMEX_140630_102952
-rwxr-xr-x. 1 root root 821 Jul 22 15:37 TrocaNome.sh*
[root@ns0 teste]#
[root@ns0 teste]# ./TrocaNome.sh
AMEX_BISTEK_140630_102952_20140628_0026
[root@ns0 teste]# l
total 16
drwxr-xr-x. 2 root root 4096 Jul 22 15:37 ./
drwx------. 12 estf estf 4096 Jul 22 15:35 ../
-rw-r--r--. 1 root root 94 Jul 19 12:12 AMEX_BISTEK_140630_102952_20140628_0026
-rwxr-xr-x. 1 root root 821 Jul 22 15:37 TrocaNome.sh*

[root@ns0 teste]# cat AMEX_BISTEK_140630_102952_20140628_0026
9911960318,00010101,000000,0000000000,00000,0,0,(20140628),040103,00(0026),EXTRATO ELETR AMEX







Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts