Shell - Localiza o arquivo mais recente que corresponde a um determinado padrão

0

Eu tenho os seguintes arquivos.

root@VMBOX:/client# ls -lrt /client/*/ver* /client/*/*/ver*  
-rw-r--r-- 1 root root 0 Jul  5 18:54 /client/folder299/version_1
-rw-r--r-- 1 root root 0 Jul  5 18:58 /client/ifolder299/ifolder/version_a
-rw-r--r-- 1 root root 0 Jul  5 18:58 /client/ifolder300/ifolder1/version_b
-rw-r--r-- 1 root root 0 Jul  5 18:58 /client/ifolder301/ifolder2/version_c
-rw-r--r-- 1 root root 0 Jul  5 18:58 /client/ifolder302/ifolder3/version_d
-rw-r--r-- 1 root root 0 Jul 19 13:35 /client/folder300/version_2
-rw-r--r-- 1 root root 0 Jul 19 13:35 /client/folder301/version_3
-rw-r--r-- 1 root root 0 Jul 19 13:36 /client/folder302/version_4

Estou tentando obter o arquivo de versão mais recente para um padrão correspondente a um ID. Exemplo é mostrado abaixo.

root@VMBOX:/client# ls -lrt /client/*/ver* /client/*/*/ver*   | grep 299
-rw-r--r-- 1 root root 0 Jul  5 18:54 /client/folder299/version_1
-rw-r--r-- 1 root root 0 Jul  5 18:58 /client/ifolder299/ifolder/version_a

A versão mais recente é version_a no exemplo acima.

root@VMBOX:/client# ls -lrt /client/*/ver* /client/*/*/ver*   | grep 299 | tail -1
-rw-r--r-- 1 root root 0 Jul  5 18:58 /client/ifolder299/ifolder/version_a

Disseram-me que essa abordagem não é boa para encontrar um arquivo ( Por que * not * parse 'ls'? ) e estou procurando uma maneira alternativa como o link . Por favor, deixe-me saber se algo não está claro.

Atualização:

De abaixo resposta por Jasen, eu poderia obter o arquivo mais recente no caminho / cliente

find /client -path "*299*" -printf "%T@ %P\n" | sort -n | tail -1

Mas, o comando acima fornece o arquivo mais recente. Eu estou procurando encontrar o arquivo de versão mais recente.

    
por Raj 19.07.2018 / 10:45

1 resposta

1

você pode combinar encontrar e classificar

find -path "some pattern" -printf "%T@ %P\n" | sort -n | tail -1
    
por 19.07.2018 / 12:24