0

我正在使用以下 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" username@mail.com

但是我得到了以纯文本形式打印的回声。更近一点。。

更新

1)好的......所以我的第一个问题是我试图将文件重命名为的时间戳不起作用并且下载失败。所以我暂时删除了时间戳(即使我想要它以便它可以进行备份......)。以下代码是我用来下载文件的新行。无论服务器时间戳如何,它都应该不断下载新副本。这是因为在您访问该 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...
4

2 回答 2

1

如果您还没有mutt安装,那么您可以执行以下操作:

echo "$(ls -1t ~/files/csv_backups/products_csv/* | head -1)" | 
mail -s "subject line" email@address.com

这将给出主题正文中文件的路径

全部echo $(ls -1t ~/files/csv_backups/products_csv/* | head -1)是因为您将不知道文件名是什么,因为您添加的是时间戳而不是日期戳。这%H%M%S也会在文件名中添加小时分钟和秒。

使用上述命令,我们假设该目录中的最新文件将是最近下载的文件。

或者,您可以使用uuencodewhich 是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@address.com
于 2013-07-08T17:58:54.527 回答
1

Heiner Steven 写了一篇关于 [编写通过电子邮件发送文件的脚本]( http://www.shelldorado.com/articles/mailattachments.html的好文章。他还写sendfile了使用该metamail包的内容(可在上面的链接中找到)。

另一种方法是使用;-) perlman perlfaq9涵盖电子邮件)或将uuencode.

 uuencode Sales.cvs Sales.cvs | mail -s "Kaching"  listofmanagers@widgetsinc.com

注意:我认为所有版本都uuencode要求您提供两次附件名称:一次用于文件编码;一次用于编码。一次是用于从消息中提取的文件的名称。 uuencode也可能出现b64encode在某些 BSD 系统上。uuencode您可以使用-m开关进行 Base64 编码。

于 2013-07-08T18:47:17.480 回答