首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Linux终端中按时间顺序对列表进行排序?

如何在Linux终端中按时间顺序对列表进行排序?
EN

Stack Overflow用户
提问于 2014-11-01 23:00:49
回答 3查看 2.5K关注 0票数 1

我在linux终端中有以下命令(Fedora-20)

代码语言:javascript
复制
stat -c "The file "%n" was modified on "%y ** | awk 'BEGIN{OFS=" "}{for(i=1;i<=7;++i)printf("%s ",$i)}{print "at " substr($8,0,5)}' | sort -nr

这个命令给出了如下的输出:

代码语言:javascript
复制
 The file Question5.sh was modified on 2014-10-29 at 17:30
 The file Question4.sh was modified on 2014-10-29 at 17:30
 The file Question2.sh was modified on 2014-11-01 at 22:51
 The file Question2.sh~ was modified on 2014-11-01 at 22:51
 The file Question1.sh was modified on 2014-10-29 at 18:37
 The file Question1.sh~ was modified on 2014-10-29 at 17:53

不幸的是,排序-nr在我的情况下不起作用。

我如何按时间顺序对这份清单进行排序?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-11-01 23:05:37

如果您想按日期和时间进行排序,这似乎是可行的。

代码语言:javascript
复制
sort -s -k7 -k9
票数 1
EN

Stack Overflow用户

发布于 2014-11-01 23:55:25

这似乎是your other question的后续行动。也许你应该具体说明你的目标是什么。管他呢。

我为您提供了几种显示修改后的文件日期的可能性。下面对它们进行了调整,以便根据修改时间对文件进行排序:

使用date (和Bash)

代码语言:javascript
复制
#!/bin/bash

shopt -s nullglob
for file in *; do
    date -r "$file" +"%s%tThe file ${file//%/%%} was modified on %F at %R"
done | sort -n | cut -f2-

find

代码语言:javascript
复制
find . -mindepth 1 -maxdepth 1 -name '*' -printf '%T@\tThe file %f was modified on %TY-%Tm-%Td at %TH:%TM\n' | sort -n | cut -f2-

备注

这些都是从最古老的到最新的。如果需要另一个订单,请将-r选项添加到sort中。

这些方法适用于文件名中的空格,但与文件名中的换行符分开。我觉得你根本不想在这里考虑这样的文件名。为了安全起见,您可以完全忽略它们,如下所示:

  • 对于date版本:在顶部添加shopt -s extglob,并将for行替换为 (*$‘n’*);请执行
  • 对于find版本:在命令中添加\! -name $'*\n*',如下所示: 找出来。-mindepth 1 -maxdepth 1 -name '*‘!-name $'*\n*’-printf‘%T@\t文件%f在%TY-%Tm-%Td上进行了修改:%TM\n’排序-n _f2-
  • find版本还将显示隐藏的文件。如果你不想要他们 找出来。-maxdepth 1 -name '*‘!-name $’*\n*!-name '.*‘-printf’%T@\t文件%f在%TY-%Tm-%Td上被修改:%TM\n‘同级-n \n’排序-n_f2-
票数 1
EN

Stack Overflow用户

发布于 2014-11-01 23:09:32

尝试先于ls -t | xargs并从stat中删除**以及最后一个sort

代码语言:javascript
复制
ls -t | xargs stat -c "The file "%n" was modified on "%y | awk 'BEGIN{OFS=" "}{for(i=1;i<=7;++i)printf("%s ",$i)}{print "at " substr($8,0,5)}'

然后,ls将按时间顺序为您排序文件,并将它们一个一个地传递给stat

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26694153

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档