shell脚本与wget获取日期减去1天

时间:2012-04-03 15:34:15

标签: linux perl bash shell unix

我写了一个下载文档的shell脚本。

cd Desktop/Reports/folder/

wget http://www.mywebpage.com/data/reports/2012_04_02_data.xls

echo "data downloaded."

棘手的部分是我要加载的文档(2012_04_02_data.xls)是前一天的日期。所以我需要下载前几天的数据,而不是当天。

我的目标是运行shell脚本,而不必每天早上递增日历日。相反,shell将占用当前日期并减去一个日历日,然后在该URL中加载该日期。

感谢您的帮助!

4 个答案:

答案 0 :(得分:7)

怎么样:

wget "http://www.mywebpage.com/data/reports/$(date -d yesterday +%Y_%m_%d)_data.xls"

这应该适用于GNU coreutils,它基于我猜你有的linux标签。

答案 1 :(得分:2)

您可以使用date命令

$ wget "http://www.mywebpage.com/data/reports/$(date -d yesterday +'%Y_%m_%d')_data.xls"

答案 2 :(得分:1)

更棘手的部分是,如果你必须处理好几天。通常我会忘记包含页面的链接,然后从href属性中删除日期。然后将字符串传递给“真正的”wget命令。

答案 3 :(得分:1)

你用perl标记了这个,所以这就是我用Perl做的方法。这并不意味着我认为你应该使用Perl:

use v5.10.1;

use DateTime;
use Mojo::UserAgent;

chdir 'Desktop/Reports/folder' or die "Could not chdir: $!";

my $date = DateTime->now->subtract( days => 1 )->ymd( '_' );
my $url = sprintf 
    "http://www.mywebpage.com/data/reports/%s_data.xls",
    $date;

my $data = Mojo::UserAgent->new->get( $url )->res->body;

您可以使用用户代理执行更多花哨的操作,以便将块保存到文件中以及您可能想要执行的许多其他操作,但您必须自己填写这些内容。