¿Cómo enumero las carpetas con guiones bajos primero?

23

Entonces, como casi todos, antes de usar Ubuntu usaba una máquina Windows, y una de las cosas a las que me acostumbré en Windows fue usar el guión bajo como primer carácter del nombre de una carpeta como una especie de marca especial para que sea aparecen primero en la lista, tanto en la línea de comandos como en el explorador de archivos.

Por ejemplo, en mi carpeta de eBooks (en Windows) se ve así:

_read
      Book1.pdf
      Book2.pdf
_reading
      Book3.pdf
Book4.pdf
Book5.pdf

pero en Nautilus de Ubuntu se ve así:

Book4.pdf
Book5.pdf    
_read
      Book1.pdf
      Book2.pdf
_reading
      Book3.pdf

Lo que está sucediendo es que ignora por completo el guión bajo y trata "_read" como "read" y, por lo tanto, no lo enumera primero como se desea.

He intentado establecer la variable de entorno LC_COLLATE en C. Esto ayuda de alguna manera, ya que enumera el guión bajo juntos, pero al final, y no al principio.

Gracias.

nunos
fuente
¿Puedes incluir una captura de pantalla?
philshem
Posible duplicado de askubuntu.com/questions/115741/… aunque creo que la respuesta de @ maggotbrain es mejor que la presentada allí.
rudivonstaden

Respuestas:

16

Como no ha especificado la configuración regional que está utilizando actualmente, esta solución asume que la está utilizando en_US.UTF-8como predeterminada.

Puede verificar esto ejecutando el comando localedesde la línea de comando ( Ctrl+ Alt+ t).

Por ejemplo:

~ $ locale
LANG=en_US.UTF-8
LANGUAGE=en_US
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=

La variable que afecta el orden de clasificación de los archivos se llama LC_COLLATE .

De acuerdo con las páginas de ayuda de Ubuntu , la variable LC_COLLATE determina "Cómo se ordenan alfabéticamente las cadenas (nombres de archivo ...). El uso de la configuración regional" C "o" POSIX "aquí da como resultado un orden de clasificación similar a strcmp (), que puede ser preferible a las configuraciones regionales específicas del idioma ".

El orden de clasificación deberá cambiarse de LC_COLLATE="en_US.UTF-8"a LC_COLLATE=C.

Desde la línea de comando ( Ctrl+Alt + t), ingrese:

update-locale LC_COLLATE=C

Importante: debe cerrar la sesión de su sistema y luego volver a iniciarla para que los cambios surtan efecto .

Al ejecutar el localecomando nuevamente, debería mostrar que la LC_COLLATEvariable se ha cambiado con éxito. Ejecutar el comando ls -lnuevamente debería reflejar este cambio.

Kevin Bowen
fuente
1
Ya configuré LC_COLLATE en C, como lo describí en el último párrafo de mi pregunta. Aún así, obtengo resultados diferentes tanto en el terminal como en el explorador nautilus y, mientras tanto, he reiniciado la computadora. ¿Alguna idea de por qué está sucediendo?
nunos
@nunos ¿Tienes algún alias establecido lsen tu .bashrc?
Kevin Bowen
@nunos Interesante. ¿En qué tipo de sistema de archivos está comprobando esto? El único lugar donde tengo problemas con la ls -lordenación es en una unidad con formato ntfs que no parece respetar la variable LC_COLLATE. Todos mis sistemas de archivos ext3 parecen respetar esa configuración utilizando el comando ls, así como en Thunar y Nautilus.
Kevin Bowen
ese podría muy bien ser el problema entonces. Estoy usando el ls -lcomando en una unidad NTFS, ya que tengo un arranque dual con Windows.
nunos
2
update-locale LC_COLLATE=C¡no ayuda obtener carpetas con guiones bajos en la parte superior de una lista ordenada si usa letras mayúsculas al comienzo de los nombres de sus carpetas!
malisokan
1

caja (y creo que Nautilus antes) tiene una opción en Preferencias para ordenar las carpetas antes que los archivos. ¿Eso ayudaría?

desconocido
fuente