The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]




Версия для распечатки Пред. тема | След. тема
Новые ответы [ Отслеживать ]
отправка нескольких файлов с помощью uuencode из скрипта, !*! mbb, 02-Мрт-12, 09:26  [смотреть все]
здравствуйте, подскажите пожалуйста, где у меня ошибка. Задача - отправить несколько *.txt файлов из консоли, грубый пример кода:

a=`ls -l *.txt | awk '{ print $9}' | while read line; do echo $line | sed -e "s%$line%uuencode $line $line;%g" | tr "\n" " "; done`

attach=\($a\)

$attach | mail -s "test" email@mail.ru

получаю сообщение об ошибке:
(uuencode: command not found
нужно как то экранировать скобку, но как, не пойму, если из консоли отправлять командой
(uuencode 1.txt 1.txt; uuencode 2.txt 2.txt; uuencode test.txt test.txt; ) | mail -s "test" email@mail.ru
то все отправляется нормально (

  • отправка нескольких файлов с помощью uuencode из скрипта, !*! primus, 18:57 , 02-Мрт-12 (1)
    > здравствуйте, подскажите пожалуйста, где у меня ошибка. Задача - отправить несколько *.txt
    > файлов из консоли, грубый пример кода:
    > a=`ls -l *.txt | awk '{ print $9}' | while read line;
    > do echo $line | sed -e "s%$line%uuencode $line $line;%g" | tr
    > "\n" " "; done`
    > attach=\($a\)
    > $attach | mail -s "test" email@mail.ru

    может?
    for i in *.txt
    do
    uuencode "$i" "$i" | mail -s "subj" mail@mail.ru
    done

    • отправка нескольких файлов с помощью uuencode из скрипта, !*! mbb, 07:25 , 05-Мрт-12 (2)
      >[оверквотинг удален]
      >> a=`ls -l *.txt | awk '{ print $9}' | while read line;
      >> do echo $line | sed -e "s%$line%uuencode $line $line;%g" | tr
      >> "\n" " "; done`
      >> attach=\($a\)
      >> $attach | mail -s "test" email@mail.ru
      > может?
      > for i in *.txt
      > do
      > uuencode "$i" "$i" | mail -s "subj" mail@mail.ru
      > done

      можно и так, но к сожалению, таким образом отправляется несколько писем с одним вложением, а нужно вложить несколько файлов в одно письмо.

  • отправка нескольких файлов с помощью uuencode из скрипта, !*! LSTemp, 05:53 , 07-Мрт-12 (3)
    > (uuencode 1.txt 1.txt; uuencode 2.txt 2.txt; uuencode test.txt test.txt; ) | mail

    а прямо так написать религия не позволяет? не пойму зачем огород городить...

    пишите в сабшеле = внутри скобок любую обработку и | mail.

    [root@local ~]# cat ccc.bsh
    #!/bin/bash
    (
    for i in 1 2 3
    do
      j="j-$i"
      echo $j
    done
    )|tail -n 2

    [root@local ~]# ./ccc.bsh  
    j-2
    j-3


    • отправка нескольких файлов с помощью uuencode из скрипта, !*! mbb, 07:01 , 07-Мрт-12 (4)
      >[оверквотинг удален]
      > (
      > for i in 1 2 3
      > do
      >   j="j-$i"
      >   echo $j
      > done
      > )|tail -n 2
      > [root@local ~]# ./ccc.bsh
      > j-2
      > j-3

      Спасибо за отклик, но таким образом отправится несколько писем с одним вложением. А нужно одно письмо с несколькими вложениями. Для ясности поясню ситуацию - есть 10 серверов, есть набор служб, которые в разных сочетаниях на них крутятся. Есть скрипт, который обрабатывает лог файлы за период, и складывает всю найденную инфу в txt файлики, после чего шлет на мыло. В итоге хочу получить следующее - по одному письму от каждого сервера с приложенными txt. Количество текстовых файликов может изменяться, поэтому и огород ) надеюсь что понятно описал проблему. Можно не запариваться и поставить mutt, но мне такой вариант не подходит, потому что есть машины, на которые mutt поставить не представляется возможным, а uuencode там есть.

      • отправка нескольких файлов с помощью uuencode из скрипта, !*! LSTemp, 07:04 , 07-Мрт-12 (5)
        >[оверквотинг удален]
        >> for i in 1 2 3
        >> do
        >>   j="j-$i"
        >>   echo $j
        >> done
        >> )|tail -n 2
        >> [root@local ~]# ./ccc.bsh
        >> j-2
        >> j-3
        > Спасибо за отклик, но таким образом отправится несколько писем с одним вложением.

        вложенные циклы обработки кто-то отменял?

        [root@local ~]# cat ccc.bsh
        #!/bin/bash
        for n in 10 20 30
        do
           echo "$n:"
           for i in 1 2 3
           do
             echo "mail $n-$i; "
           done|tail -n 2
        done

        [root@local ~]# ./ccc.bsh
        10:
        mail 10-2;
        mail 10-3;
        20:
        mail 20-2;
        mail 20-3;
        30:
        mail 30-2;
        mail 30-3;

        • отправка нескольких файлов с помощью uuencode из скрипта, !*! mbb, 07:40 , 14-Мрт-12 (7)
          >[оверквотинг удален]
          > [root@local ~]# ./ccc.bsh
          > 10:
          > mail 10-2;
          > mail 10-3;
          > 20:
          > mail 20-2;
          > mail 20-3;
          > 30:
          > mail 30-2;
          > mail 30-3;

          извиняюсь за столь долгую задержку, по вашим примерам только что составил скрипт:

          (
          for n in *.txt
          do
              echo "uuencode $n $n;"
          done
          )| tr "\n" " " | mail -s "test" emailaddress

          получил письмо со строкой
          uuencode 1.txt 1.txt; uuencode 2.txt 2.txt; uuencode test.txt test.txt;

          такого результата я тоже достигал, главная проблема в том, что эту строку нужно выполнить, а не поместить в письмо (

  • отправка нескольких файлов с помощью uuencode из скрипта, !*! LSTemp, 08:08 , 07-Мрт-12 (6)
    >[оверквотинг удален]
    > "\n" " "; done`
    > attach=\($a\)
    > $attach | mail -s "test" email@mail.ru
    > получаю сообщение об ошибке:
    > (uuencode: command not found
    > нужно как то экранировать скобку, но как, не пойму, если из консоли
    > отправлять командой
    > (uuencode 1.txt 1.txt; uuencode 2.txt 2.txt; uuencode test.txt test.txt; ) | mail
    > -s "test" email@mail.ru
    > то все отправляется нормально (

    • отправка нескольких файлов с помощью uuencode из скрипта, !*! mbb, 06:41 , 15-Мрт-12 (8)
      в общем проблему решил так:

      #!/bin/bash
      . config

      sendmail="/usr/sbin/sendmail"
      boundary='simple boundary'

      (cat <<EOF;
      To: $ADMINMAIL
      From: $HOSTNAME
      Subject: test
      Content-Type: multipart/mixed; boundary=$boundary

      This is a multi-part message in MIME format.
      --$boundary
      EOF
      for name in *.txt
          do
              file=`cat $name`
              echo "Content-Type: application/octet-stream"
              echo "Content-Transfer-Encoding: binary"
              echo "Content-Disposition: attachment; filename="$name""
             echo "$file"
              echo ""
              echo "--$boundary"
      done
      echo "--$boundary--"
      echo ""
      ) | $sendmail -t -oi

      exit 0

      осталась только одна проблема, файлы посылаются нормально, за исключением логов oracle :) надо их чем то кодировать, а я в этом пока не разобрался, если есть мысли по этому поводу - буду рад если подскажете

      • отправка нескольких файлов с помощью uuencode из скрипта, !*! mbb, 09:37 , 15-Мрт-12 (10)
        более конкретное описание проблемы - для кодирование в base64 нужно как то заменить переносы строк, таким образом, что бы base64 их понял... но я пока не знаю как
        • отправка нескольких файлов с помощью uuencode из скрипта, !*! mbb, 11:51 , 15-Мрт-12 (11)
          ну чтож) пообщаюсь сам с собой, на будущее всем кто столкнется с похожей проблемой.
          почти "запилил" скрипт, теперь выглядит так:

          #!/bin/bash
          . config

          sendmail="/usr/sbin/sendmail"
          boundary='simple boundary'

          (cat <<EOF;
          To: $ADMINMAIL
          From: $HOSTNAME
          Subject: test
          Content-Type: multipart/mixed; boundary=$boundary
          MIME-Version: 1.0

          --$boundary
          EOF
          for name in *.txt
              do
                  sed -i 's/$'"/`echo \\\r`/g" $name    #решает проблему с изменением переносов строк с LF на CRLF
                  echo "--$boundary"
                  echo "Content-Type: text/plain; name=\"$name\""
                  echo "Content-Transfer-Encoding: base64"
                  echo "Content-Disposition: attachment; filename=\"$name\""
                  echo ""
                  base64 $name
                  echo ""
          done
          echo "--$boundary--"
          ) | $sendmail -t -oi

          exit 0

          для полного счастья осталось составить правильные заголовки для the bat (что бы аттачи были текстовыми файлами, а не часть.att), результат выложу, может кому интересно будет

    • отправка нескольких файлов с помощью uuencode из скрипта, !*! mbb, 06:42 , 15-Мрт-12 (9)



Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру