Ordenar archivos en Terminal como buscador

1

¿Es posible en la línea de comandos tener el mismo orden de clasificación de archivos / carpetas que Finder? Si ejecuto find . -type d , obtengo como salida:

./Folder 1
./Folder 10
./Folder 11
./Folder 2
./Folder 3
...

Probé find -s . -type d y también agregué algunas opciones sort . Sin suerte.

Lo que quiero es esto:

./Folder 1
./Folder 2
./Folder 3
...
./Folder 10
./Folder 11
    
pregunta doekman 29.12.2016 - 10:52

2 respuestas

2

Si observa lo que find dice acerca de la clasificación:

 -s   Cause find to traverse the file hierarchies in 
lexicographical order, i.e., alphabetical order within each directory.  
Note: 'find -s' and 'find | sort' may give different results.

Esto significa que debemos canalizarlo a sort para que podamos manipularlo un poco más.

Como ya ha visto, una ordenación alfanumérica simple no funcionará porque está comparando todo como un carácter ANSI, no como números. Lo que tenemos que hacer es comparar los números. Podemos hacer esto con la opción -k de sort

find . -type d | sort -k2.3

Lo que está haciendo el comando sort -k2.3 está ordenando en el segundo campo (delimitado por el espacio) que termina en la tercera posición. Este es el resultado utilizando la convención de nomenclatura de carpeta 1 :

.
./Folder 1
./Folder 2
./Folder 3
./Folder 4
./Folder 5
./Folder 6
./Folder 7
./Folder 8
./Folder 9
./Folder 10
./Folder 11
./Folder 12
./Folder 13
./Folder 14
./Folder 15

1 Para crear esta estructura de carpetas, usé el comando en mi carpeta de inicio:

mkdir test; cd test; for n in {1..15}; do mkdir "Folder $n"; done
    
respondido por el Allan 29.12.2016 - 23:04
0

También puede hacer

ls -v

que ordena los archivos por números de versión en nombres por orden natural.

Desde man ls

-v     natural sort of (version) numbers within text
    
respondido por el Shinko Cheng 29.12.2016 - 20:52

Lea otras preguntas en las etiquetas