Ответ 1
Если у вас есть date
GNU, вы можете использовать любой цикл for
в любой POSIX-совместимой оболочке:
# with "for"
for i in {1..5}; do
echo $(date -I -d "2014-06-28 +$i days")
done
или цикл until
, на этот раз с использованием расширенного теста Bash [[
:
# with "until"
d="2014-06-29"
until [[ $d > 2014-07-03 ]]; do
echo "$d"
d=$(date -I -d "$d + 1 day")
done
Обратите внимание, что не древние версии sh
также будут выполнять лексикографическое сравнение, если вы измените условие на [ "$d" \> 2014-07-03 ]
.
Вывод из любого из этих циклов:
2014-06-29
2014-06-30
2014-07-01
2014-07-02
2014-07-03
Для более переносимого способа сделать то же самое, вы можете использовать Perl-скрипт:
use strict;
use warnings;
use Time::Piece;
use Time::Seconds;
use File::Fetch;
my ($t, $end) = map { Time::Piece->strptime($_, "%Y-%m-%d") } @ARGV;
while ($t <= $end) {
my $url = "http://www.example.com/" . $t->strftime("%F") . ".log";
my $ff = File::Fetch->new( uri => $url );
my $where = $ff->fetch( to => '.' ); # download to current directory
$t += ONE_DAY;
}
Time :: Piece, Time :: Seconds и File :: Fetch являются основными модулями. Используйте его как perl wget.pl 2014-06-29 2014-07-03
.