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

时间:2017-04-05 02:11:25

标签: linux date terminal

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

以下是一个示例列表:

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

每个目录都包含相同数据的修订版,但我希望了解每个ID的最新信息。在上述情况下,这将是_41_20170323110720/_42_20170324120233/

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

1 个答案:

答案 0 :(得分:0)

我发现自己创建了一个怪物,但假设你只希望文件的最后日期在该格式的末尾,这个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)根据特殊键找到最大值 这允许我们使用一个函数来判断是否&#34; red&#34;大于&#34;蓝色&#34;

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

我们用它来找到&#34;最大值&#34;日期,这是您计划中最新的日期(201703150220大于201603150220)。

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

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