我正在使用以下cron任务:
wget -O ~/files/csv_backups/products_csv/products-`date +%Y-%m-%d-%H%M%S`.csv http://[site_URL]/product-report/csv
获取每日产品销售CSV。它目前将它放在服务器上的文件目录中,并用日期戳命名。
我要做的是它还发送一封电子邮件,其中包含文件的附件或正文中的文件的链接,以及特定的电子邮件地址。我似乎找不到办法做到这一点。有什么想法吗?
更新:
我已尝试使用建议的代码,但它只是输出文件的尾随路径,而不是正确的下载链接。所以我尝试了以下内容
echo "<a href="http://www.example.com' . $(ls -1t ~/files/csv_backups/products_csv/* | head -1) . '">Download File</a>" | mail -s "Daily Products CSV Report" [email protected]
但是我得到了用纯文本打印的回声。言归正传..
更新:
1)OK ...所以我的第一个问题是我尝试重命名文件的时间戳不起作用,下载失败。所以我现在删除了时间戳(尽管我希望它可以进行备份...)。以下代码是我用来下载文件的新行。无论服务器时间戳如何,它都应该不断下载新副本。这是因为在您访问该URL之前根本不会生成该文件,因此在wget尝试下载之前没有文件可以比较时间。
wget --timestamping -r -O files/csv_backups/products_csv/products.csv http://www.example.com/reports/product-report/csv
2)对于电子邮件,我删除了html并且刚刚离开了以下内容,因为由于某种原因,回声渲染了纯文本中的html,这不起作用。为什么发生这种情况可能也是为什么我不能使用URL末尾的$(ls -1t * | head -1)行来分析最新文件...
echo "http://www.example.com/files/csv_backups/products_csv/products.csv" | mail...
如果您没有安装mutt
,那么您可以执行以下操作:
echo "$(ls -1t ~/files/csv_backups/products_csv/* | head -1)" |
mail -s "subject line" [email protected]
这将给出主题体中文件的路径
整个echo $(ls -1t ~/files/csv_backups/products_csv/* | head -1)
是因为你不知道文件名是什么,因为你添加时间戳而不是日期戳。 %H%M%S
还会为文件名添加小时分钟和秒。
使用上面的命令,我们假设该目录中的最新文件将是最近下载的文件。
或者你可以使用uuencode
,它是GNU sharutils
的一部分。
uuencode $(ls -1t ~/files/csv_backups/products_csv/* | head -1) $(ls -1t ~/files/csv_backups/products_csv/* | head -1) |
mail -s "subject line" [email protected]
海纳史蒂文写了一篇关于[编写通过电子邮件发送文件的脚本]的好文章(http://www.shelldorado.com/articles/mailattachments.html。他还写了sendfile
,它使用了metamail
包(可在上面的链接中找到)。
另一种方法是使用perl
;-)(man perlfaq9
涵盖电子邮件)或使用uuencode
除尘。
uuencode Sales.cvs Sales.cvs | mail -s "Kaching" [email protected]
注意:我认为所有版本的uuencode
都要求您给出附件的名称两次:一次是要编码的文件;和一次用于从消息中提取的文件的名称。 uuencode
也可能在某些BSD系统上显示为b64encode
。您可以使用uuencode
开关使用-m
进行Base64编码。