返回最后写入的文件,文件名中包含特定的子字符串?

返回最后写入的文件,文件名中包含特定的子字符串?

在监视日志记录时,我必须按写入日期排序查看日志文件,这样我就可以看到应用程序最近执行的日志文件的名称。

给定目录和子字符串,有什么方法可以返回包含该子字符串(最近写入的文件)的名称吗?

所以如果我有

AFile1.log (last written 9am)
AFile2.log (last written 10am)

我想返回包含文件名“AFile”的最新日志,它会返回 AFile2.log?

答案1

在监视日志记录时,我必须按写入日期排序查看日志文件,这样我就可以看到应用程序最近执行的日志文件的名称。

我认为这意味着应用程序会像这样写入日志文件:

  • 文件1.log
  • 文件2.log
  • 文件3.log
  • 一份文件X。日志

给定目录和子字符串,有什么方法可以返回包含该子字符串(最近写入的文件)的名称吗?

我假设这个子字符串是部分文件名 AFile,而不是在日志文件中查找的字符串。

我想返回包含文件名“AFile”的最新日志,它会返回 AFile2.log?

从手册中lsman ls):

-t     sort by modification time, newest first
-l     use a long listing format

因此,为了首先看到它的实际效果,我们可以ls -lt首先获取包含最新修改的长目录列表。

$ ls -lt AFile*.log
-rw-r--r-- 1 root root 27254 May 23 09:00 AFile2.log
-rw-r--r-- 1 root root 29599 May 22 21:15 AFile1.log

好的。这有效。 (我们知道我们不想要长列表;我们只是用来-l见证所需的输出是正确的。)现在,我们如何只获取第一行?如果我们不知道如何做到这一点,那么使用apropos通常是有益的。那么我们来尝试一下吧。

$ apropos "first"

在多行输出中,我们看到以下内容:

head (1)             - output the first part of files

好的,让我们看一下head(man headman 1 head) 的手册页。

-n, --lines=[-]K
print  the first K lines instead of the first 10; with the lead‐
ing '-', print all but the last K lines of each file

连接点,并使用管道,我们得到最新的文件。

$ ls -t AFile*.log | head -n 1
AFile2.log

管道是使用字符的构造,它将传递to|的输出。ls -t AFile*.loghead -n 1

相关内容