Você precisa classificar pelo último campo (considerando /
como um separador de campo). Infelizmente, não consigo pensar em uma ferramenta que possa fazer isso quando o número de campos varia (se apenas sort -k
puder receber valores negativos).
Para contornar isso, você terá que fazer uma decorar-classificar-undecorate. Ou seja, pegue o nome do arquivo e coloque-o no início, seguido por um separador de campo, faça uma classificação e remova a primeira coluna e o separador de campo.
find . ! -path "./build*" -name "*.txt" |\
awk -vFS=/ -vOFS=/ '{ print $NF,$0 }' |\
sort -n -t / |\
cut -f2- -d/
Esse comando awk
diz que o separador de campos FS
está definido como /
; isso afeta a maneira como lê os campos. O separador de campos de saída OFS
também é definido como /
; isso afeta a maneira como imprime registros. A próxima instrução diz imprimir a última coluna ( NF
é o número de campos no registro, portanto, também é o índice do último campo), bem como todo o registro ( $0
é o registro inteiro); ele irá imprimi-los com o OFS entre eles. Então a lista é sort
ed, tratando /
como o separador de campos - já que temos o nome do arquivo primeiro no registro, ele irá classificar por isso. Em seguida, o cut
imprime somente os campos 2 até o final, tratando novamente /
como o separador de campo.