如何列出一个目录中最近修改的5个文件?可以使用ls命令。

183

我知道ls -t会按修改时间列出所有文件。但是如何将这些结果限制为仅包括最后的n个文件?


15
倒序排列命令 ls -lrt 可能会帮助某些人。 - PJ Brunet
7个回答

326

尝试使用 head 或 tail。如果您想要最近修改的 5 个文件:

ls -1t | head -5

“-1”(读作一)表示每行一个文件,“head”表示取前5个条目。

如果您想要最后5个,请尝试:

ls -1t | tail -5

3
如果我没记错的话,shell会将ls命令的输出以多列的形式表示出来,但是ls命令的输出会逐个文件/目录地传输到下一个命令。 - Alex
4
忽略顶部的总计信息: ls -1t | head -n 6 | tail -n 5 - Ryan
2
我没有看到总数,但如果有的话那肯定可以使用。 - Paul Rubel

46

接受的答案只列出了文件名,但要获取前5个文件,可以使用以下命令:

ls -lht | head -6

其中:

-l 以列表格式输出

-h 使输出可读性更高(即文件大小以kb、mb等方式显示)

-t 按最近修改的文件排序输出

head -6 将显示5个文件,因为 ls 在输出的第一行中打印块大小。

我认为这是一个稍微更优雅和可能更有用的方法。

示例输出:

total 26960312 -rw-r--r--@ 1 user staff 1.2K 11 Jan 11:22 phone2.7.py -rw-r--r--@ 1 user staff 2.7M 10 Jan 15:26 03-cookies-1.pdf -rw-r--r--@ 1 user staff 9.2M 9 Jan 16:21 Wk1_sem.pdf -rw-r--r--@ 1 user staff 502K 8 Jan 10:20 lab-01.pdf -rw-rw-rw-@ 1 user staff 2.0M 5 Jan 22:06 0410-1.wmv


16

使用 tail 命令:

ls -t | tail -n 5

3
这将给出5个最古老的。为了获得5个最新的结果,您需要反转排序(使用 ls -tr)或者使用 head 而不是 tail - Headbank

10

默认情况下,ls -t按照从新到旧的顺序排序输出结果,因此要使用的命令组合取决于您希望输出结果按哪个方向排序。

要获取按从新到旧排序的最新5个文件,请使用head命令来获取输出的前5行:

ls -t | head -n 5

针对最新的5个文件,按照从旧到新的顺序,使用-r开关反转ls的排序方式,并使用tail获取输出的最后5行:

ls -tr | tail -n 5

2

ls -t按创建时间列出文件,而不是最后修改时间。如果您想按从上到下的最后修改时间列出文件,请使用ls -ltc。因此,要列出最后的n个文件:ls -ltc | head ${n}


1
你指的是哪个平台/版本?能提供一个链接吗? 查看Linux man页面得出的结论与你所说的相反: -t 按修改时间排序,最新的排在最前面 - Joma

2

其他的答案对我都没有起作用。结果既包含文件夹又包含文件,这不是我所期望的。

对我有用的解决方案是:

find . -type f -mmin -10 -ls

这将列出当前目录中在过去10分钟内修改的所有文件。它不会列出最后5个文件,但我认为它仍然可能有帮助。


-1
如果你想观察它处理最近修改的五个文件并在2秒内刷新并在顶部显示文件总数,请使用以下代码:

watch 'ls -Art | wc -l ; ls -ltr | tail -n 5'


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接