Bash / Shell: Obtenha a lista dos arquivos mais recentes por ctime no diretório, classifique e recupere apenas 3 para cada um deles

0

Eu tenho os seguintes arquivos em um diretório:

trunk_rev.94564.zip
trunk_rev.94565.zip
trunk_rev.94566.zip
trunk_rev.94567.zip
trunk_rev.94568.zip
trunk_rev.94569.zip
v15_rev.94560.zip
v15_rev.94561.zip
v15_rev.94562.zip
v15_rev.94563.zip
v15_rev.94564.zip

Como posso obter uma lista de N (por exemplo, 3) mais recentes por arquivos ctime para cada padrão? Os nomes de arquivo podem ser diferentes. Por exemplo:

trunk_rev.94567.zip
trunk_rev.94568.zip
trunk_rev.94569.zip
v15_rev.94562.zip
v15_rev.94563.zip
v15_rev.94564.zip
<some_another_file>.zip
<some_another_file>.zip
<some_another_file>.zip

Obrigado antecipadamente!

    
por johny_amamam 31.03.2016 / 19:08

3 respostas

0

Experimente:

ls -1rt | awk 'BEGIN { FS="."; OFS="."; } { if (count[$1]<3) { count[$1]++; filenames[i++]=$0; } } END { for ( i in filenames ) { printf("%s\n",filenames[i]); } }'

Os arquivos serão listados somente por ordem de horário.

Para listá-los por hora agrupada por nome, adicione um comando sort :

ls -1rt | awk 'BEGIN { FS="."; OFS="."; } { if (count[$1]<3) { count[$1]++; filenames[i++]=$0; } } END { for ( i in filenames ) { printf("%s\n",filenames[i]); } }' | sort -t . -k 1,1
    
por 31.03.2016 / 22:44
1

Você deve ler o manual de ls neste ponto:

-c with -lt: sort by, and show, ctime (time of last modification of file status information) with -l: show ctime and sort by name other-wise: sort by ctime, newest first

e o manual da cabeça , se ainda não estiver familiarizado com ela.

    
por 31.03.2016 / 19:28
1

Tente o seguinte:

ls -l --time-style=full-iso | sort -k6 | tail -n3
    
por 31.03.2016 / 19:35