Retornando o último arquivo escrito, contendo uma subcadeia específica no nome do arquivo?

1

Ao monitorar o log, eu tenho que ir para meus arquivos de log, ordenar por data escrita, para que eu possa ver o nome do arquivo de log para a execução mais recente do meu aplicativo.

Existe alguma maneira, dado um diretório e uma subcadeia, de retornar o nome do arquivo que contém a sub-string, que foi escrita mais recentemente para?

Então, se eu tivesse

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

e eu queria retornar o log mais recente contendo o nome do arquivo "AFile", ele retornaria AFile2.log?

    
por user997112 23.05.2015 / 13:35

1 resposta

4

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 .

    
por 23.05.2015 / 15:35