Answers:
注意:这将对GNU查找有效,但不适用于其他所有查找。
find . -maxdepth 1 -size +20M -printf "%T@ %f\n" |
sort -nr | head -n 20 | sed 's/[^ ]\+ //'
以@Rajish开头,但使用printf
from命令find
指定输出格式。有3个与时间相关格式,的atime,的ctime和修改时间 - %T
是为修改时间,%A
并且%C
对于其他格式。
@
用于指定自纪元以来的时间格式(以秒为单位)。%f
用于文件名,\n
用于两个文件之间的换行符。
然后,按相反的顺序对数字进行排序,将首先给出最年轻的文件,然后我们用20行¹ head
。
最后,sed
用于丢弃时间信息。
¹)由于head
是逐行进行的,因此名称中包含20个以上换行符的单个文件可能会破坏输出(如果属于前20个匹配项,这有点不寻常,但并非禁止)。如果您碰巧有此类文件,请尝试摆脱它们-好吧,更改它们的名称。对于简单的脚本,它们通常是一个问题。
printf
仅适用于特定的GNU发行版。
%T+
产生人类可读的时间戳等2018-11-06+13:37:54.4606466460
其也可排序由sort
(无-n
),见:unix.stackexchange.com/questions/29899/...
Zsh的glob限定符使这变得容易。在.
预选赛中只选择普通文件,Lm+20
选择文件,这些文件至少20MB加上长一个字节; 要包含正好20MB的文件,请使用L+20971519
。然后om
通过减少修改时间进行排序,并将[1,10]
扩展限制为前10个匹配项。如果要按日期列出文件,则仍然需要-t
选择ls
。或者您可以将文件传递给其他命令(最年轻)。要将文件首先传递到文件最旧的另一个命令,请使用Om
进行排序,以增加修改时间并[-10,-1]
提取最后10个匹配项。
ls -ltr -- *(.Lm+20om[1,10])
echo *(.Lm+20Om[-10,-1])
file
的-ls
命令,则特殊字符将被打印为反斜杠转义字符:find . -maxdepth 1 -size +20M -printf "%T@ " -ls | sort -nr | head -n 20 | sed 's/[^ ]\+ //'
。此外ls -l
,-l
无论如何,格式也将看起来像,EoghanM也已指定。