我在linux终端中有以下命令(Fedora-20)
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这个命令给出了如下的输出:
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在我的情况下不起作用。
我如何按时间顺序对这份清单进行排序?
发布于 2014-11-01 23:05:37
如果您想按日期和时间进行排序,这似乎是可行的。
sort -s -k7 -k9发布于 2014-11-01 23:55:25
这似乎是your other question的后续行动。也许你应该具体说明你的目标是什么。管他呢。
我为您提供了几种显示修改后的文件日期的可能性。下面对它们进行了调整,以便根据修改时间对文件进行排序:
使用date (和Bash)
#!/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
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-发布于 2014-11-01 23:09:32
尝试先于ls -t | xargs并从stat中删除**以及最后一个sort
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。
https://stackoverflow.com/questions/26694153
复制相似问题