Como você deseja apenas o horário da última modificação (mês e data) dos arquivos .log
no diretório atual, basta usar a opção -r
de date
. Não há necessidade de qualquer regex ou outros comandos supérfluos.
Você pode usar este shell de uma linha:
for i in *.log; do echo "$i: $(date '+%b-%d' -r "$i")"; done
Por exemplo, estou encontrando o mês e a data da última modificação de todos os arquivos .txt
no diretório atual:
$ for i in *.txt; do echo "$i: $(date '+%b-%d' -r "$i")"; done
file.txt: Feb-12
new.txt: Jul-23
O principal comando envolvido aqui é:
date '+%b-%d' -r file.txt
$ date '+%b-%d' -r file.txt
Feb-12
Se você quiser fazer a operação recursivamente, use find
:
find . -type f -name '*.txt' -printf '%p: ' -exec date '+%b-%d' -r {} \;
Exemplo:
$ find . -type f -name '*.txt' -printf '%p: ' -exec date '+%b-%d' -r {} \;
./foo/list.txt: Jul-16
./new.txt: Jul-15
./file.txt: Jul-23
EDITAR:
Para responder ao original regex
way:
$ ls -l *.txt | grep -Po '.*[[:digit:]]+ \K[[:alpha:]]{3} [[:digit:]]{2}'
Jul 23
Jul 15
-
grep -Po
indica que usaremos o PCRE e obteremos apenas a parte correspondente -
.*[[:digit:]]+
corresponde à parte desejada e\K
descarta a correspondência -
[[:alpha:]]{3} [[:digit:]]{2}
corresponde a três caracteres alfabéticos (mês) seguidos por um espaço e dois dígitos (data).