如何从Unix发送电子邮件,其中包含10个文件中的3个文件行数,大小和日期

时间:2017-01-20 04:37:03

标签: email unix

我需要向用户发送一封电子邮件,其中包含目录中多个文件中的3个文件行数,大小和日期。文件将每月生成,因此每月邮件必须在文件生成后发送。

目标直播:/work/directory

目录下的文件列表:

month_f1.txt    
month_f2.txt    
month_f3.txt    
old_month_f1.txt    
old_month_f2.txt

电子邮件应按照以下文件详细信息发送:

Hi All,

PFB file details.    
---------------------------------
|filename       |rowcount |size  |  
---------------------------------
|month_f1.txt   |100      |20567 |  
|month_f2.txt   |200      |40567 |   
|month_f3.txt   |300      |60567 |
---------------------------------

提前致谢!!

2 个答案:

答案 0 :(得分:1)

这是一个重构得很好的Awk脚本,可以一次完成所有事情。

this.counter = setInterval(function () {
      console.log("toto");
    }, 1000);

awk 'BEGIN { print "Subject: Numbers for this month\n"; print "Hi All,\n\nPFB file details\n" print "----------------------------------" print "|filename |rowcount |size |" print "----------------------------------" } { bytes[FILENAME] += length($0)+1; ++lines[FILENAME] } END { for (j=1; j<ARGC; ++j) printf("|%-15s|%9i|%6i|\n", ARGV[j], lines[ARGV[j]], bytes[ARGV[j]]) print "----------------------------------" }' /work/directory/file* | sendmail email@domain.com 是一个内置的Awk变量,其文件名是当前打开的文件,FILENAME是文件名参数列表。其余的应该是相当明显的;我们将当前行的长度(加上由Awk剥离的终止换行符加1)添加到该文件的字节数,并增加行数。完成后,我们打印累计数字。

答案 1 :(得分:0)

要在work/directory/中发送有关所有文件的统计信息,这个shell脚本应该可以解决问题:

#!/bin/sh

echo "Subject: Stats of 3 files\n\nHi All,\n\nPFB file details" > /tmp/stats_mail.txt
printf "%40s %8s %8s\n" filename rowcount size >> /tmp/stats_mail.txt
for file in "/work/directory/file1" "/work/directory/file2" "/work/directory/file3"; do
  cnt=`wc $file | awk {'print $1" "$3'}`;
  cnt_line=$(echo $cnt | cut -f1 -d" ")
  cnt_size=$(echo $cnt | cut -f2 -d" ")
  printf "%40s %8s %8s\n" $file $cnt_line $cnt_size >> /tmp/stats_mail.txt
done
sendmail "email@domain.com" < /tmp/stats_mail.txt
rm /tmp/stats_mail.txt

这假设您已设置sendmail

根据文件名,大小和行数的长度,您可能需要调整列大小(%40s%8s,它们会出现在标题中,然后出现在{{1}中}循环)

以下是示例输出:

while