我可以使用以下命令生成按“正常顺序”按日期排序的输出:
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
。对于前者,请特别参见-M
GNU 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