【问题标题】:Using wget to download file to directory and email link/attachment to address使用 wget 将文件下载到目录并通过电子邮件发送链接/附件到地址
【发布时间】:2013-07-06 03:24:10
【问题描述】:

我正在使用以下 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...

【问题讨论】:

  • 您是否安装了mutt
  • 不,它没有出现,所以@JS웃

标签: shell email cron wget


【解决方案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 也会在文件名中添加小时、分钟和秒。

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

您也可以使用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@address.com

【讨论】:

  • 好吧,那么为了让它正常工作,你的代码应该是一个不同的 cron 任务吗?我猜想将你的添加到我正在运行的代码的末尾是行不通的,还是会这样? @JS웃
  • @TravisJohnston 您可以使用&amp;&amp; 加入这两个命令,因此如果下载成功,它将运行下一个命令。
  • 感谢您的帮助 @JS웃 ,我现在将对此进行测试。我尝试了 && 但似乎对字符串在 cron 任务中的持续时间有限制,所以我将在下载后 15 分钟运行另一个任务。我将在它运行后一小时内对其进行测试,看看它是否有效,如果有效,请标记你的答案。再次感谢您的帮助!
  • 您建议的第一个 sn-p 发送了一封电子邮件,但在正文中放置了文件的路径(不是完整的 url)。因此,我将使用 uuencode 尝试您的另一个 sn-p,看看它是否在接下来的一个小时内有效。明天才更新。 @JS웃
  • 好的,所以我不能让它工作。您的第一个 sn-p 确实发送成功,但只是将“/files/csv_backups/products_csv/products/csv”放在正文中。不是获取文件的完整 URL。我还尝试了您@JS웃 建议的 uuencode 示例,但它只发送一封空白电子邮件并且没有附件。
【解决方案2】:

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

另一种方法是使用perl ;-)(man perlfaq9 覆盖电子邮件)或清除uuencode 的灰尘。

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

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

【讨论】:

  • 谢谢@G。 Cito,在我测试了上面提供的第二个 sn-p 之后,我会看看你的建议。
  • 祝你好运。似乎您已经解决了 HTTP 获取部分。顺便说一句,如果您使用curl 而不是wget,您可以使用相同的工具下载和发送邮件;-) 干杯
  • 我尝试了 uuencode 选项,但只是发送了一封空白电子邮件。我也研究了其他一些方法,但没有成功。 (有关详细信息,请参阅我在上一篇文章中的评论)@G。西托
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-27
  • 1970-01-01
  • 1970-01-01
  • 2013-08-25
  • 2019-01-22
  • 1970-01-01
相关资源
最近更新 更多