Ordenar archivos en la Terminal como buscador

1

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

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

Lo intenté find -s . -type dy también agregué algunas sortopciones. Sin suerte.

Lo que quiero es esto:

./Folder 1
./Folder 2
./Folder 3
...
./Folder 10
./Folder 11
Doekman
fuente
2
¿Hay alguna razón específica por la que usa en findlugar de ls?
nohillside

Respuestas:

2

Si nos fijamos en lo que finddice sobre la clasificación:

 -s Causa encontrar para atravesar las jerarquías de archivos en 
orden lexicográfico, es decir, orden alfabético dentro de cada directorio.  
Nota: `find -s` y` find | sort` puede dar resultados diferentes.

Esto significa que necesitamos canalizarlo para sortpoder manipularlo un poco más.

Como ya ha visto, una ordenación alfanumérica simple no funcionará porque compara todo como un carácter ANSI, no como números. Lo que debemos hacer es comparar los números. Podemos hacer esto con la -kopción desort

find . -type d | sort -k2.3

Lo que sort -k2.3está haciendo el comando es ordenar en el segundo campo (delimitado por el espacio) que termina en la tercera posición. Este es el resultado usando la convención de nomenclatura de carpetas 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, utilicé el comando en mi carpeta de inicio:

mkdir test; cd test; for n in {1..15}; do mkdir "Folder $n"; done
Alano
fuente
Gracias, no conocía la -kopción. Sin embargo, eso no cumplió con mis requisitos. Hice este pequeño programa de Python para resolver este problema.
doekman
0

También puede hacer

ls -v

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

Desde man ls

-v     natural sort of (version) numbers within text
Shinko Cheng
fuente
2
macOS no viene con GNU ls instalado.
fd0
1
GNU ls se puede instalar a través de Homebrew.
nohillside