Página 1 de 2 12 ÚltimoÚltimo
+ Responder ao Tópico



  1. #1

    Padrão Script para recortar e colar

    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!!

  2. #2

    Padrão

    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...

  3. #3

    Padrão

    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.

  4. #4

    Padrão

    Citação Postado originalmente por relofi Ver Post
    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?

  5. #5

    Padrão

    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 ?

  6. #6

    Padrão

    Citação Postado originalmente por relofi Ver Post
    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 ?
    Os e-mails são alvos com alguma extensão? Se não vamos ter que mudar a pasta. Se não o script vai tentar renomear todos os arquivos da pasta.

  7. #7

    Padrão

    são sim...a ext é hylafax de todos os emails que chegam

  8. #8

    Padrão

    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...

  9. #9

    Padrão

    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"

  10. #10

    Padrão

    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

  11. #11

    Padrão

    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.

  12. #12

    Padrão

    Citação Postado originalmente por relofi Ver Post
    Olha o que apareceu:
    1221138770.M531800P27357Q0Rba1f2afccb87b954.hylafax
    Esse é um nome de um arquivo (email) q preciso renomear.
    tem um espaço entre 1221138770.M531800P27357Q0Rba1f2afc e cb87b954.hylafa
    Provavelmente por isso n esta funcionando...

    da um ls pra ver o nome de outros arquivos e posta ai... vou ter q ver essa questão do espaço.

  13. #13

    Padrão

    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.

  14. #14

    Padrão

    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...

  15. #15

    Padrão

    renato@hylafax:~/.getmail/new$ ./mudanome.sh
    Renomeando arquivos com espa...
    Obtendo novo nome de
    cat: : Arquivo ou diretório não encontrado
    Novo nome:

  16. #16

    Padrão

    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.

  17. #17

    Padrão

    Citação Postado originalmente por relofi Ver Post
    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.
    Acho que entre subject: e teste3 tem um espaço. por isso ta dando errado agora... Confirma se sempre vai ter o espaço entre subject: e o assunto...
    Última edição por Magnun; 01-10-2008 às 16:25.

  18. #18

    Padrão

    Desculpe-me a demora...
    mas sim...fiz o teste e sempre vai ter espaço entre o subject: e o assunto

  19. #19

    Padrão

    Citação Postado originalmente por relofi Ver Post
    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:

    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
    Por segurança coloquei um trecho que substitui os possíveis espaços nos nomes por underline (_).

    Testa ai...
    Última edição por Magnun; 02-10-2008 às 11:12.

  20. #20

    Padrão

    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...