【问题标题】:Shell Script with wget to get date minus 1-day使用 wget 获取日期减去 1 天的 Shell 脚本
【发布时间】:2012-04-17 07:19:09
【问题描述】:
我编写了一个用于下载文档的 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 中加载该日期。
感谢您的帮助!
【问题讨论】:
标签:
linux
perl
bash
shell
unix
【解决方案1】:
怎么样:
wget "http://www.mywebpage.com/data/reports/$(date -d yesterday +%Y_%m_%d)_data.xls"
这应该适用于 GNU coreutils,它基于我猜你有的 linux 标签。
【解决方案2】:
您可以使用date 命令
$ wget "http://www.mywebpage.com/data/reports/$(date -d yesterday +'%Y_%m_%d')_data.xls"
【解决方案3】:
更棘手的部分是,如果您必须处理休息日。通常我会获取包含页面的链接,然后将日期从 href 属性中删除。然后将字符串传递给您的“真实” wget 命令。
【解决方案4】:
你用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;
您可以使用用户代理做更多花哨的事情,以便在文件进入时将块保存到文件中以及您可能想要做的许多其他事情,但您必须自己填写这些位。