Estou no Ubuntu 22 e tenho uma grande árvore de arquivos com nomes irritantes que incluem valores numéricos em várias posições. Algo como:
./2
./2/9
./2/10
./2/8
./1
./1/2
./1/1
./1/11
./11
./11/page 6
./11/page 05
./11/page 4
Quero classificar isso de acordo com os valores numéricos, ignorando qualquer coisa como 'página', para obter:
./1/1
./1/2
./1/11
./2/8
./2/9
./2/10
./11/page 4
./11/page 05
./11/page 6
Eu tentei sort -n
, mas mesmo olhando apenas para os nomes dos diretórios de primeiro nível, isso não parece fazer o que eu esperava:
$ find . -mindepth 1 -type d | sort -n
./1
./11
./2
Existe uma opção útil para "classificar por cada número inteiro (não dígito)"?
Parece que
sort -V
é o que você deseja, pelo menos dada a simplicidade do seu exemplo:Uma advertência conhecida: isso não "ignora" texto como "página" na string, simplesmente o inclui na ordem de classificação. Se você tiver outros itens com “linha” e a mesma numeração, as entradas de “linha” serão sequenciadas antes das entradas de “página”.
Mas, em geral, se isso não funcionar para você, edite sua postagem e atualize seu exemplo para mostrar um exemplo de caso que não foi resolvido corretamente.
Usando zsh, com seus qualificadores glob
N
para definir a opção NULL_GLOB.
para selecionar apenas arquivos simples (ou seja, omitir os diretórios)n
para ativar a opção NUMERIC_GLOB_SORTEntão