繁体   English   中英

如何在 Linux 中按日期获取最新目录?

[英]How to get the most recent directories by date in Linux?

我有一组名称为4_4_201703140220_4_201703150220 其中第一个数字是目录 ID,尾随数字是 ISO 标准日期字符串。 这些由 Jenkins 使用,但这可能与此处无关。

这是一个示例列表:

_41_20170322145757/
_41_20170323110416/
_41_20170323110720/
_42_20170322095600/
_42_20170322103112/
_42_20170324120233/

每个目录都包含相同数据的修订版,但我想知道每个 ID 的最新版本。 在上述情况下,这将是_41_20170323110720/_42_20170324120233/

是否有一个简单的命令可以用来获取每个 ID 的最新目录列表? 或者一个 python 文件也可以工作。

我发现自己创建了一个怪物,但假设您只想要以该格式结尾的最新日期的文件,这个 Python 表达式应该可以满足您的需求:

python -c "import os; print max(((x, x.split('_')[-1]) for x in os.listdir('.')), key=lambda x: x[1])[0]"

解释

os.listdirs('.')获取当前路径下的所有目录

(x for x in y)创建一个生成器表达式

.split('_')[-1]_上拆分每个目录名,只取最后一部分

max(<whatever>, key=value)根据特殊键找到最大值
这允许我们使用一个函数来判断“红色”是否大于“蓝色”

lambda x: x[1]创建一个内联函数(称为 lambda),它只返回可迭代对象的一部分(我们可以搜索的列表)
对于包含[1, 'r', 3, 'z', 'b'] ,它将返回位置 1, 'r'的元素

我们使用它来查找“最大”日期,这是您的方案下的最新日期(201703150220 大于 201603150220)。

max()然后返回一个包含完整文件名和我们尝试匹配的日期的元组
"_4_201703150220"变成("_4_201703150220", "201703150220")

然后取[0]索引获取返回元组中的第一个值(文件名)。
("_4_201703150220", "201703150220")[0]变为"_4_201703150220"

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM