如何在 Linux 上的目录中找到最新的文件?

Linux find语句是使用最广泛的语句之一,它允许我们遍历文件层次结构。它主要用于查找特定的文件或目录,我们还可以附加不同的其他 Linux 语句或标志来增强或执行复杂的操作。

让我们探索一个find语句的示例以更好地理解它。

在下面显示的 linux 代码中,我试图在我的下载文件夹中搜索一个文件,为此我使用了find语句。

find sample.sh
输出结果
sample.sh

请注意,如果 find 命令能够定位该文件,那么它将简单地打印文件的名称,否则它将不会返回终端进程将终止的任何内容。

现在我们知道了 find 语句是如何工作的,让我们探索一下我们想使用 find 命令来查找目录中已更新的最新文件的情况。

考虑一个名为dir1的目录,其中包含以下文件。

immukul@192 dir1 % ls -ltr
total 5232
-rwxrwxrwx 1 immukul staff  446966 Sep 23 1998 wget-1.5.3.tar.gz
drwxrwxrwx 3 immukul staff      96 Jul  7 17:42 d1
-rwxrwxrwx 1 root    staff     106 Jul  8 13:10 sample2.sh
-rwxrwxrwx 1 root    staff     946 Jul 12 18:45 sample.sh
-rwxrwxrwx 1 root    staff     718 Jul 12 18:48 sample1.sh
drwxr-xr-x 2 immukul staff      64 Jul 13 11:36 dr1
drwxr-xr-x 3 immukul staff      96 Jul 13 11:36 dr2
-rw-r--r-- 1 immukul staff     661 Jul 14 09:00 newZip.zip
-rw-r--r-- 1 immukul staff 2201512 Jul 14 09:19 zipContent.zip
-rwxrwxrwx 1 immukul staff      24 Jul 14 15:52 sss.sh
-rw-r--r-- 1 immukul staff     122 Jul 14 16:10 somefile.txt
-rw-r--r-- 1 immukul staff       0 Jul 15 09:44 sample 1.txt
drwxrwxrwx 4 immukul staff     128 Jul 15 10:27 d2

现在由于 ls 命令的输出不是那么大,我们可以手动比较上述目录中文件的所有更新时间,并获取最近更新的文件,但是如果我们有大量文件,这种方法将不起作用文件的数量,因为查看该目录中存在的所有文件的时间会更加乏味。

更好的方法是使用下面显示的命令。

命令

对于 Mac 操作系统-

find . -type f -exec stat -lt "%Y-%m-%d" {} \+ | cut -d' ' -f6- | sort -n | tail -1

对于其他基于 Linux 的操作系统-

find . -type f -printf "%T@ %p\n" | sort -n | cut -d' ' -f 2- | tail -n 1
输出结果
2021-07-15 ./sample 1.txt

另一种方法是使用ls命令,它看起来像这样。

命令

ls -Art | tail -n 1
输出结果
sample 1.txt