按日期排序 ls

Lan*_*nes 26 sort busybox

原来的:

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

我生成了上面的列表(原始):

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
Run Code Online (Sandbox Code Playgroud)

如何获得最新文件位于顶部的输出?

Ale*_*yak 29

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

-t 按修改时间排序

尝试以下命令:

$ ls -lt


Gil*_*il' 20

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

sort -k 3 -k 1M -k2 -k4 in.txt
Run Code Online (Sandbox Code Playgroud)

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


小智 6

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

例如,

ls -t --full-time 
Run Code Online (Sandbox Code Playgroud)

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

ls -tr --full-time
Run Code Online (Sandbox Code Playgroud)

然后它会颠倒顺序。