classificar arquivos duas vezes

0

Eu tenho uma série de mais de 300 arquivos que eu preciso classificar duas vezes, uma vez pela data e uma segunda vez dentro dessa data por parte do nome do arquivo.
O único padrão nos nomes é que termina com *mmddyyyy<time stamp>.csv , em que a primeira parte do nome do arquivo pode incluir qualquer coisa. Eu sei ls -ltr me dá o tipo de data, mas eu não consigo capturar e classificar em uma parte do último keydef.

    
por Maria Olivero 19.01.2016 / 17:10

1 resposta

0

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.

    
por 23.03.2016 / 13:05