gpt4 book ai didi

bash - 如何使用 bash 中可用的工具生成一个范围内所有日期的列表?

转载 作者:行者123 更新时间:2023-11-29 08:47:24 26 4
gpt4 key购买 nike

我想下载一堆以 ISO-8601 日期命名的文件。有没有一种简单的方法可以使用 bash+GNU coreutils 来做到这一点? (或者一些让 wget/curl 自动生成列表的技巧,但我发现这不太可能)

类似这个问题,但不限于工作日:How to generate a range of nonweekend dates using tools available in bash? .我想有一种更简单的方法可以不受此限制。

也与 How to generate date range for random data on bash 相关,但不限于一年。

最佳答案

如果你有 GNU date,你可以使用 for 循环 in any POSIX-compliant shell :

# with "for"
for i in {1..5}; do
# ISO 8601 (e.g. 2020-02-20) using -I
date -I -d "2014-06-28 +$i days"

# custom format using +
date +%Y/%m/%d -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

请注意,如果您将条件更改为 [ "$d"\> 2014-07-03 ]sh 的非古代版本也会进行字典序比较。

任一循环的输出:

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 一样使用它。

关于bash - 如何使用 bash 中可用的工具生成一个范围内所有日期的列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25701265/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com