Dado que, ao olhar para os nomes dos arquivos do lado final, eles têm um formato previsível (extensão, hora e data), é possível aproveitar esse fato e usar o seguinte comando:
ls -1 | rev | sort -t '~' -k1.14,1.14 -k1.13,1.13 -k1.12,1.12 -k1.11,1.11 -k1.18,1.18 -k1.17,1.17 -k1.16,1.16 -k1.15,1.15 | rev
Explicação:
- os nomes de arquivos são invertidos primeiro para que possamos acessar o formato desejado
- o resultado é classificado por caractere por caractere, dependendo das nossas necessidades:
- os caracteres de 11 a 14 são o ano (na ordem inversa)
- os caracteres 17 a 18 são o mês (na ordem inversa)
- os caracteres 15 a 16 são o dia (na ordem inversa)
- finalmente, outra reversão ocorre para exibi-los com nomes originais
Eu usei o til ~
como separador para combinar o nome do arquivo inteiro em um campo, mas você pode brincar usando um diferente (tem que ser um caractere que nunca está presente nos nomes dos arquivos) ou apenas usar um .
(ponto) para dividir o nome do arquivo em vários campos (se o valor for sempre o mesmo) para que você possa especificar outras partes para serem classificadas - para sua segunda pergunta.