Whilst monitoring logging I have to go to my log files, order by written date, so I can then see the name of the log file for the most-recent execution of my application.
Suponho que isso signifique que o aplicativo grava arquivos de log assim:
- AFile1.log
- AFile2.log
- AFile3.log
- AFile x .log
Is there any way, given a directory and sub-string, to return the name of the file containing that sub-string, which was most-recently written to?
Eu assumo que esta sub-string é o nome parcial do arquivo, AFile, e não uma string para encontrar dentro de um arquivo de log.
I wanted to return the most recent log containing the file name "AFile", it'd return AFile2.log?
No manual em ls
( man ls
):
-t sort by modification time, newest first
-l use a long listing format
Portanto, para primeiro ver isso em ação, poderíamos usar ls -lt
para obter uma lista longa de diretórios com a mais nova modificação primeiro.
$ 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
Bom. Isso funciona. (Sabemos que não queremos a lista longa; estamos apenas usando -l
para testemunhar que a saída desejada está correta.) Agora, como podemos pegar apenas a primeira linha? Se não soubermos como fazer isso, o uso de apropos
é geralmente benéfico. Então vamos tentar.
$ apropos "first"
Entre as muitas linhas de saída, vemos o seguinte:
head (1) - output the first part of files
Ok, vamos ver a página do manual para head
( man head
ou 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
Conectando os pontos e usando um canal , obtemos o arquivo mais recente.
$ ls -t AFile*.log | head -n 1
AFile2.log
O pipe é a construção que usa o caractere |
, que passa a saída de ls -t AFile*.log
para head -n 1
.