我想下载一堆以ISO-8601日期命名的文件。有没有简单的方法可以使用bash+GNU coreutils来实现这一点?(或者使用一些技巧让wget/curl自动生成列表,但我发现这不太可能)
与此问题类似,但不限于工作日:我想有一种更简单的方法可以做到这一点,没有这个限制。
也与How to generate date range for random data on bash相关,但不限于单个年份。
我想下载一堆以ISO-8601日期命名的文件。有没有简单的方法可以使用bash+GNU coreutils来实现这一点?(或者使用一些技巧让wget/curl自动生成列表,但我发现这不太可能)
与此问题类似,但不限于工作日:我想有一种更简单的方法可以做到这一点,没有这个限制。
也与How to generate date range for random data on bash相关,但不限于单个年份。
5条答案
按热度按时间ocebsuys1#
如果你有GNU
date
,你可以在任何POSIX兼容的shell中使用for
循环:或者
until
循环,这次使用Bash的扩展测试[[
:请注意,如果将条件更改为
[ "$d" \> 2014-07-03 ]
,则sh
的非古代版本也会进行词典编纂比较。来自这些循环之一的输出:
要以更可移植的方式完成相同的工作,可以使用Perl脚本:
Time::Piece、Time::Seconds和File::Fetch都是核心模块,使用起来像
perl wget.pl 2014-06-29 2014-07-03
。jq6vz3qz2#
使用GNU date和bash:
ehxuflar3#
如果你使用的是macOS,那么
date
的工作方式与GNUdate
稍有不同。下面是Tom Fenech的date
调用的一个变体,它同时支持GNU和达尔文:nfs0ujit4#
我使用这个方便的函数来处理 yyyymmdd.log.gz 格式的日志文件:
它接受 yyyymmdd 格式的日期。
m1m5dgzv5#
由于我不知道确切的日期范围,只知道最后一个文件是今天的,所以我最终使用了顶部答案的变体,它从今天的日期开始,一次向后迭代一天,直到下载失败(大概是404):