09 мая 2017

Упаковка и отсылка файлов на почту

#!/bin/bash

# Скрипт упаковывает txt-файлы и отсылает их на почту
# Нужен пакет sendemail и почтовый сервер, позволяющий отсылать почту

cityname='new_york'
txtdir="/var/log/asterisk"
email_from="my@supermail.com"
email_to="my_other@supermail.com"

curdir="$(dirname $(readlink -f $0))"
tmpdir="$curdir/tmp"
curdate="$(date +%d-%m-%Y)"
arcname="$curdir/$cityname-$curdate.tgz"
arcname_google="$curdir/$cityname-$curdate.bin"

# проверим, есть ли исходная папка с текстовиками
if [ ! -d "$txtdir" ]; then
    echo 'Source directory doesnt exist!'
    exit 1
fi

# проверим есть ли в ней текстовые файлы
if test -z "$(find "$txtdir" -maxdepth 1 -name '*.txt' -print -quit)"; then
    echo 'No text files found, exit'
    exit 1
fi

# если есть временная папка - удалим её и создадим пустую
if [ -d "$tmpdir" ]; then
    rm -rf "$tmpdir"
fi
mkdir -p "$tmpdir"

# найдём все txt, сделаем хардлинки и удалим исходные
find "$txtdir" -maxdepth 1 -type f  -name '*.txt' \
    -exec sh -c 'ln "$1" "'$tmpdir'/$(basename $1)"; rm -f "$1"' _ {} \;

# начнём писать новые, пока не поздно =)
/etc/init.d/asterisk reload > /dev/null 2>&1

# создадим архив
find "$tmpdir" -maxdepth 1 -name '*.txt' -printf '%P\0' | tar --null -C "$tmpdir" --files-from=- -czf "$arcname_google"

# отошлём по почте созданный архив
sendemail \
    -s smtp.mega.mail:25 \
    -f $email_from \
    -t $email_to \
    -m "Rename attachment to $(basename $arcname) and unpack =)" \
    -u "$cityname asterisk info ($curdate)" \
    -a "$arcname_google" > /dev/null 2>&1

# удалим файлы, но оставим архив на всякий случай
rm -rf "$tmpdir"

Комментариев нет:

Отправить комментарий