2015-09-04 2 views
0

Я хочу использовать команду find, чтобы получить файлы старше 8640 минут и отправить результат в тело электронной почты. Я использовал этот скрипт, который делает использование файла - ATTACH_FILE - содержащий результаты команды найти:Запуск команды поиска и результатов электронной почты

#!/bin/sh 
ATTACH_FILE="/pub/email_attach.txt" 
WORK_DIR="/pub/" 
rm -f $ATTACH_FILE 
find $WORK_DIR -maxdepth 1 -name '*x.rsd' -type f -daystart -mmin +8640 -exec echo {} >> $ATTACH_FILE \; 

if [ ! -z $ATTACH_FILE ]; then 
    FILESIZE=$(stat -c%s "$ATTACH_FILE" 2>> getLatestErr.log) 
    echo $ATTACH_FILE "size $FILESIZE bytes" 
    if [ $FILESIZE -gt 0 ]; then 
     cat $ATTACH_FILE | mail -s "Test "$TODAY [email protected] 
    fi 
fi 

Как я могу получить тот же результат, помещая сообщение в теле письма, не используя вспомогательный файл ПРИКРЕПИТЬ ФАЙЛ ?

+0

Захват вывода поиска в переменной: 'FILELIST = $ (find ...)', отсутствие перенаправления вывода; используйте 'FILELIST' вместо' ATTACH_FILE' в остальном коде, удалите строки, относящиеся к файлу. Замените вычисление FILESIZE и проверьте с помощью 'if [-n" $ {FILELIST} "]; затем ' –

+0

@Tom Regner благодарит за вашу ответственность. Если я использую FILE_LIST = $ (найти $ WORK_DIR -maxdepth 1-name '* x.rsd' -type f -daystart -mmin +8640); У меня есть все элементы в одной строке, например file1 file2 .... Как я могу разделить их на несколько строк? – famedoro

+0

Вы использовали одно из предлагаемых решений? Есть ли еще проблемы? Немного отзыва приятно :) –

ответ

1

Чтобы развернуть на мой комментарий выше:

Присвоить переменной массива и использовать printf для разделения найденных предметов с символом новой строки:

#!/bin/bash 
WORK_DIR="/pub/" 

FILE_LIST=($(find $WORK_DIR -maxdepth 1 \ 
    -name '*x.rsd' -type f \ 
    -daystart -mmin +8640)) 

if [ -n "${FILE_LIST[0]}" ]; then 
    printf '%s\n' "${FILE_LIST[@]}" | mail -s "Test "$TODAY [email protected] 
fi 

Я обменен /bin/sh с /bin/bash, а вопрос помечен [bash].

2

Вы можете использовать опцию -e для mail. Это говорит, что ничего не делать, если вход пуст.

find $WORK_DIR -maxdepth 1 -name '*x.rsd' -type f -daystart -mmin +8640 -print | mail -e -s "Test "$TODAY [email protected] 
Смежные вопросы