Ordenar por data

11

Original:

Jan 23 2011 10:42 SOMETHING 2007.12.20.avi
Jun 26 2009 SOMETHING 2009.06.25.avi
Feb 12 2010 SOMETHING 2010.02.11.avi
Jan 29 2011 09:17 SOMETHING 2011.01.27.avi
Feb 11 2011 20:06 SOMETHING 2011.02.10.avi
Feb 27 2011 23:05 SOMETHING 2011.02.24.avi

Saída:

Feb 27 2011 23:05 SOMETHING 2011.02.24.avi
Feb 11 2011 20:06 SOMETHING 2011.02.10.avi
Jan 29 2011 09:17 SOMETHING 2011.01.27.avi
Jan 23 2011 10:42 SOMETHING 2007.12.20.avi
Feb 12 2010 SOMETHING 2010.02.11.avi
Jun 26 2009 SOMETHING 2009.06.25.avi

Gerei a lista acima (Original) com:

ls -A -lR | grep "^-" | sed "s/.\{43\}/&\n/" | grep -v "^-" | while read ONELINE; do if echo $ONELINE | cut -d " " -f3 | grep -o '[0-9][0-9]:[0-9][0-9]' > /dev/null 2>&1; then echo $ONELINE | sed "s/.\{7\}/&$(date +%Y) /"; else echo $ONELINE; fi; done

Como posso obter a saída em que o arquivo mais recente está no topo?

    
por LanceBaynes 28.02.2011 / 21:25

4 respostas

12

É um arquivo de texto que você está tentando classificar ou está tentando visualizar uma listagem de diretório por data? Para o último, use o sinal -t para ls . Para o primeiro, veja em particular o -M flag para o GNU sort, que classifica por abreviaturas de nome de três letras. O seguinte comando classifica pela 3ª, 1ª, 2ª e 4ª colunas, tratando a segunda chave de classificação como um nome de mês.

sort -k 3 -k 1M -k2 -k4 in.txt

Considere sempre usar datas em estilo japonês / ISO, sempre na ordem YYYY-MM-DD-HH-MM-SS (ou seja, a largura de coluna constante mais significativa primeiro). Desta forma, classificar por data é idêntico a um tipo lexicográfico.

    
por 28.02.2011 / 22:20
12

Na maioria dos unices, ls tem uma opção -t . Na página man da minha caixa Debian:

-t sort by modification time

Tente o seguinte comando:

$ ls -lt

    
por 28.02.2011 / 21:34
3

Não tenho certeza se a funcionalidade estava no comando ls quando a pergunta original foi feita, mas agora você pode usar a opção --full-time .

por exemplo,

ls -t --full-time 

irá classificar com o tempo mais antigo na parte inferior; ou se você usa:

ls -tr --full-time

então, a ordem será revertida.

    
por 17.02.2017 / 21:23
-3

recursivo ( R ) e pausa ( |more )

ls -ltR |more
    
por 17.11.2016 / 13:36

Tags