按文件名中的日期按相反顺序对 ls 输出进​​行排序

按文件名中的日期按相反顺序对 ls 输出进​​行排序

我可以使用以下命令生成按“正常顺序”按日期排序的输出:

ls -A -lR | grep "^-" | sed "s/.\{43\}/&\n/" | grep -v "^-" | while read ONELINE; do if echo $ONELINE | cut -d " " -f3 | grep -o '[0-9][0-9]:[0-9][0-9]' > /dev/null 2>&1; then echo $ONELINE | sed "s/.\{7\}/&$(date +%Y) /"; else echo $ONELINE; fi; done

结果:

2011年1月23日 10:42 有事 2007.12.20.avi
2009年6月26日 一些事 2009.06.25.avi
2010 年 2 月 12 日 某事 2010.02.11.avi
2011年1月29日 09:17 有事 2011.01.27.avi
2011年2月11日 20:06 有事 2011.02.10.avi
2011年2月27日 23:05 有事 2011.02.24.avi

我怎样才能获得最新文件位于顶部的输出,如下所示:

2011年2月27日 23:05 有事 2011.02.24.avi
2011年2月11日 20:06 有事 2011.02.10.avi
2011年1月29日 09:17 有事 2011.01.27.avi
2011年1月23日 10:42 有事 2007.12.20.avi
2010 年 2 月 12 日 某事 2010.02.11.avi
2009年6月26日 一些事 2009.06.25.avi

答案1

在大多数单机上,ls都有一个-t选项。从man我的 Debian 盒子的页面:

-t 按修改时间排序

尝试以下命令:

$ ls -lt

答案2

这是您要排序的文本文件,还是要查看按日期列出的目录?对于后者,使用该-t标志ls。对于前者,请特别参见-MGNU sort 标志,它按三个字母的月份名称缩写进行排序。以下命令按第三、第一、第二和第四列排序,将第二个排序键视为月份名称。

sort -k 3 -k 1M -k2 -k4 in.txt

请考虑始终使用日语/ISO 样式日期,始终按照 YYYY-MM-DD-HH-MM-SS 的顺序(即最重要的在前,列宽恒定)。这种按日期排序的方式与字典排序相同。

答案3

我不确定ls提出原始问题时命令中是否包含该功能,但现在您可以使用该选项--full-time

例如,

ls -t --full-time 

将以最早的时间排序在底部;或者如果您使用:

ls -tr --full-time

那么它会颠倒顺序。

答案4

这将列出所有文件递归地ls输出和反向排序经过修改时间(时间):

find -print0 -type f directory_path | xargs -0 ls -ltr

使用以下命令可以更快地执行搜索fd

fd -0 -t f directory_path | xargs -0 ls -ltr

相关内容