Olá!
Preciso de um script que abra um arquivo meu leia um campo nesse arquivo e salve o arquivo com o nome desse campo.
Ex:
Arquivo: qualquerum
Campo: subject: teste
NEW_name_arquivo: teste
Alguém pode me ajudar a fazer isso ?!
vlw!!
Olá!
Preciso de um script que abra um arquivo meu leia um campo nesse arquivo e salve o arquivo com o nome desse campo.
Ex:
Arquivo: qualquerum
Campo: subject: teste
NEW_name_arquivo: teste
Alguém pode me ajudar a fazer isso ?!
vlw!!
Acho que isso aqui dá... é simples mas funciona
Código :#Variáveis # #nome do arquivo inicial arq_inicial="qualquerum" #chave que indicará o novo nome chave="subject:" #extrai o nome do novo arquivo selecionando pela chave e #pegando o segundo item separado por ":" novo_arq=$(cat $arq_inicial | grep $chave | cut -d":" -f 2) #Cria novo arquivo com o conteudo do antigo cat $arq_inicial > $novo_arq
qualquer dúvida posta ai...
Só uma duvida cara.
o arquivo inicial ele gera sempre um nome aleatorio...como colocar isso para que o script entenda?
tpo...o meu cenario é o seguinte....recebo email pelo getmail e ele salva o email com um nome aleatorio...preciso que esse email seja salvo com o nome do subject do email.
ai é outra coisa...Você tem como definir pelomenos uma pasta onde esses e-mails são salvos?? Se sim agente pode fazer o seguinte. Um script que le todo o conteudo da pasta, renomeia todos os arquivos e move para uma outra pasta. Dessa forma é só executar esse script de vez em quando.
O que acha?
sim ele recebe sempre na minha home.
sim até pode ser assim, desde que seja salvo os emails dessa pasta com o nome do subject de cada e-mail entendeu ?
Testa ai... preenche os diretorios iniciais e finais...Testei aqui e funcionou.
Código :#!/bin/bash #Variáveis inicias #Diretorio inicial dir_inicial="/home/magnun/teste1" #Diretorio de destino dir_final="/home/magnun/teste2" #Chave que identifica novo nome chave="subject:" #vai para diretorio inicial cd $dir_inicial #Lista conteudo lista=$(ls -F | grep "[.]hylafax$") #Percorre lista de arquivos for item in $lista do #Captura novo nome com base na chave novo_nome=$(cat $item | grep $chave | cut -d":" -f 2) echo Renomeando e movendo $item para $dir_final/$novo_nome.hylafax... mv $item $dir_final/$novo_nome.hylafax done
Lembrando que o programa funciona se o subject:nome tiver no inicio da linha
Até mais...
Cara eu copiei e colei seu script em um arquivo novo: script.sh dei permissão para ele de 775 e rodei ./script.sh
Ele não fez nada, não deu erro algum porém também não fez a tarefa proposta....porque será?
A única coisa que mudei do seu script foi o diretorio inicial e final (obvio)
#Diretorio inicial
dir_inicial="/home/renato/.getmail/new"
#Diretorio de destino
dir_final="/home/renato/email"
Os dois diretórios já existem?
Fiz algumas mudaças pra mostrar algumas mensagens... Se ele não mostrou nenhuma mensagem é porque ele não deve ter encontrado nenhum arquivo com a extensão .hylafax. Testa esse novo com algumas mesnagens a mais. Se não funcionar entra no diretório /home/renato/.getmail/new e executa o comando ls -F | grep "[.]hylafax$" e verifica se os arquivos foram listados.
Até mais...
Código :#Variáveis inicias #Diretorio inicial dir_inicial="/home/renato/.getmail/new" #Diretorio de destino dir_final="/home/renato/email" #Chave que identifica novo nome chave="subject:" #vai para diretorio inicial cd $dir_inicial echo movendo para: pwd #Lista conteudo lista=$(ls -F | grep "[.]hylafax$") echo Lista de arquivos a serem renomeados ... echo $lista #Percorre lista de arquivos for item in $lista do #Captura novo nome com base na chave novo_nome=$(cat $item | grep $chave | cut -d":" -f 2) echo Renomeando e movendo $item para $dir_final/$novo_nome.hylafax... mv $item $dir_final/$novo_nome.hylafax done
Olha o que apareceu:
movendo para:
/home/renato/.getmail/new
Lista de arquivos a serem renomeados ...
Eu dei exatamente esse comando: ls -F | grep "[.]hylafax$" e ele não listou nada, mas dentro desse diretorio os arquivos estao aassim:
1221138770.M531800P27357Q0Rba1f2afccb87b954.hylafax
Esse é um nome de um arquivo (email) q preciso renomear.
1222874877.M771049P5913Q1R314aad071b7200de.hylafax
1222874639.M367075P5907Q0R4d759ff2487e9b57.hylafax
1222874877.M694186P5912Q0Re25cc6e1db79e69e.hylafax
Na verdade não tem espaço, fica com espaço só quando eu posta por aqui...mas ta sem espaço algum aqui no meu servidor e até agora mesmo aqui na resposta, mas se dou enviar a resposta ele coloca um espaço.
Na verdade o que está acontecendo é o seguinte:
Quando rodo o script ele da permissão negada olha só:
renato@hylafax:~/.getmail/new$ ./mudanome.sh
movendo para:
/home/renato/.getmail/new
Lista de arquivos a serem renomeados ...
1222877382.M202095P6074Q0Rbef27276aaa4ce47.hylafax
Renomeando e movendo 1222877382.M202095P6074Q0Rbef27276aaa4ce47.hylafax para /home/renato/email/.hylafax...
mv: impossivel mover `1222877382.M202095P6074Q0Rbef27276aaa4ce47.hylafax' para `/home/renato/email/.hylafax': Permissão negada
Dai se eu dou permissão na pasta: chmod -R ugo+rwx.....ele roda o scrpit mas não acha nenhuma arquivo:
renato@hylafax:~/.getmail/new$ ./mudanome.sh
movendo para:
/home/renato/.getmail/new
Lista de arquivos a serem renomeados ...
Última edição por relofi; 01-10-2008 às 13:07.
Faz o seguinte...
Testa isso aqui pra mim:
Código :#Variáveis inicias #Diretorio inicial dir_inicial="/home/renato/.getmail/new" #Diretorio de destino dir_final="/home/renato/email" #Chave que identifica novo nome chave="subject:" #vai para diretorio inicial cd $dir_inicial echo Renomeando arquivos com espaço... for item in *' '*.hylafax do echo Obtendo novo nome de $i novo_nome=$(cat "$i" | grep $chave | cut -d" " -f 2) echo Novo nome: $novo_nome echo ' ' done
Põe a saída dele...
Valeu...
renato@hylafax:~/.getmail/new$ ./mudanome.sh
Renomeando arquivos com espa...
Obtendo novo nome de
cat: : Arquivo ou diretório não encontrado
Novo nome:
cara como havia falado não tem nada de espaço não..o problema era outro...o subject estava com letra miniscula..ai ele naum tava encontrando a palavra pra trocar...agora ele ta achando e renomeando..oq será agora?
renato@hylafax:~/.getmail/new$ ./mudanome.sh
movendo para:
/home/renato/.getmail/new
Lista de arquivos a serem renomeados ...
1222882336.M819674P6155Q0R1e50115889a3cfb1.hylafax
Renomeando e movendo 1222882336.M819674P6155Q0R1e50115889a3cfb1.hylafax para /home/renato/email/ teste3.hylafax...
mv: target `teste3.hylafax' is not a directory
Esse teste3 é o Subeject do desse arquivo.
Desculpe-me a demora...
mas sim...fiz o teste e sempre vai ter espaço entre o subject: e o assunto
Então acho que o script pode ser dessa forma:
Por segurança coloquei um trecho que substitui os possíveis espaços nos nomes por underline (_).Código :#Variáveis inicias #Diretorio inicial dir_inicial="/home/renato/.getmail/new" #Diretorio de destino dir_final="/home/renato/email" #Chave que identifica novo nome chave="subject:" #vai para diretorio inicial cd $dir_inicial echo movendo para: $(pwd) #Remove espaços em branco dos nomes de arquivos for i in *' '*.hylafax do echo Removendo espaco de $i... mv "$i" "${i// /_}" done #Lista conteudo lista=$(ls -F | grep "[.]hylafax$") echo Lista de arquivos a serem renomeados ... echo $lista #Percorre lista de arquivos for item in $lista do #Captura novo nome com base na chave novo_nome=$(cat $item | grep $chave | cut -d" " -f 2) echo Renomeando e movendo $item para $dir_final/$novo_nome.hylafax... mv $item $dir_final/$novo_nome.hylafax done
Testa ai...
Última edição por Magnun; 02-10-2008 às 11:12.
Cara deu certo!!!!
Só ta dando esse erro mais não está influenciando no resultado final!
renato@hylafax:~/.getmail/new$ /home/renato/email/mudanome.sh
movendo para: /home/renato/.getmail/new
Removendo espaco de 1222958768.M903844P7551Q0R31af6c7b7bd4a02a.hylafax *.hylafax...
mv: impossÃvel fazer stat em `* *.hylafax': Arquivo ou diretório não encontrado
Lista de arquivos a serem renomeados ...
1222958768.M903844P7551Q0R31af6c7b7bd4a02a.hylafax
Renomeando e movendo 1222958768.M903844P7551Q0R31af6c7b7bd4a02a.hylafax para /home/renato/email/123456.hylafax...