在参数中指定 Unix 时间戳范围

在参数中指定 Unix 时间戳范围

我正在 bash 中启动 mrjob,需要传入一系列 gz 文件作为参数,其中包含 unix 时间戳:filename_9127381923.gz。如何以最简单的方式做到这一点?幸运的是,我可以传入多个文件参数。

范围:

1413324000(周三 0:00)

1413410400(周四0:00)

伪示例:

$python my_mrjob.py 1413324000-1413410400.gz

答案1

使用范围运算符:

echo {1413324000..1413324199}.gz

相似地,

$python my_mrjob.py {1413324000..1413324199}.gz

如果文件不是每毫秒都存在:

$python my_mrjob.py  $(ls {1413324000..1413324199}.gz 2>/dev/null)

答案2

没那么简单,但我的“选择武器”

python my_mrjob.py $(
for f in {1413324000..1413410400}; do [ -f filename_$f.gz ] && echo $f; done
) 

PS:恕我直言,应该修改Python作业本身以允许范围输入,并具有额外的智能来跳过不存在的文件。会更快更简单。 {a..b} 语法不是惰性迭代器;它实际上生成所有数字,并将它们传递给“for”语句。这可能会导致环境空间不足。

答案3

制作一些假的测试文件:(仅针对此示例)

$ touch filename_{1000000000..1000000099..5}.gz

从输出中获取文件的“时间”范围ls并将其传递给echo

$ echo $(ls | awk -F'[_,]' '1000000044<=$2 && $2<=1000000066')

文件名_1000000045.gz 文件名_1000000050.gz 文件名_1000000055.gz 文件名_1000000060.gz 文件名_1000000065.gz

根据需要替换echo为您的电话。$python

相关内容