在监视日志记录时,我必须按写入日期排序查看日志文件,这样我就可以看到应用程序最近执行的日志文件的名称。
给定目录和子字符串,有什么方法可以返回包含该子字符串(最近写入的文件)的名称吗?
所以如果我有
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?
从手册中ls
(man 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 head
或man 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*.log
head -n 1