Usando ordenação com nomes de arquivos alfanuméricos

3

Estou classificando os resultados de um comando find , que encontra todos os arquivos no diretório atual:

find . -maxdepth 1 -type f -iname "*.flac" | sort

O que estou esperando é uma lista como esta:

./Track 1.flac
./Track 2.flac
./Track 3.flac
...
./Track 9.flac
./Track 10.flac
./Track 11.flac

O que estou recebendo é uma lista como esta:

./Track 10.flac
./Track 11.flac
./Track 1.flac
./Track 2.flac
./Track 3.flac
...
./Track 9.flac

Existe uma opção para sort , que os colocará em ordem ascendente alfanumérica para que os números sejam avaliados corretamente?

    
por Naftuli Kay 19.06.2012 / 21:40

2 respostas

10

Tente passar as opções de linha de comando -n e -k2 para sort . Ou seja,

find . -maxdepth 1 -type f -iname "*.flac" | sort -n -k2

Quando eu coloco seus nomes de arquivos não classificados no arquivo 'data.txt' e executo este comando:

sort -k2 -n data.txt

Eu recebo isso como saída:

./Track 1.flac
./Track 2.flac
./Track 3.flac
./Track 9.flac
./Track 10.flac
./Track 11.flac

explicação das opções:

-n (numeric sort) compare according to string numerical value
-k2 means sort on the 2nd field (and to the end of the line), 
    you could just restrict it to the second field with -k2,2

Você não perguntou sobre isso, e eu não o usei acima, mas pode ser útil algum dia.

-r reverse sort order 

página de manual para sort

Veja minha postagem relacionada em SO sobre a classificação de acordo com diferentes campos Classifique pela terceira coluna deixando a primeira e a segunda coluna intactas (no linux) , o que explica mais sobre o comando sort. Espero que isso ajude.

    
por 19.06.2012 / 21:51
1

Em zsh, use o qualificador de globbing n :

print -l *.flag(n)
    
por 21.06.2012 / 01:42

Tags