Clasificación de mayúsculas y minúsculas en Mac OSX

28

¿Cómo puedo hacer que el comando ls en Max OS X Lion clasifique los archivos y directorios de manera similar a como lo hace Ubuntu Linux (no distingue mayúsculas de minúsculas, directorios NO arriba, archivos de puntos NO arriba)? Idealmente, me gustaría hacer esto sin canalizar la salida a otro comando como ordenar.

Por ejemplo, quiero ver:

foo
Foobar
MyStuff/
.stuff/
test.txt

en lugar de:

.stuff
Foobar
MyStuff/
foo
test.txt

En Linux, el orden de clasificación de ls está controlado por la configuración regional del sistema, específicamente LC_COLLATE . Cuando LC_COLLATE=en_US.UTF-8 , ls ordenará los elementos como yo quiero. Cuando LC_COLLATE=C , ls ordenará similar a OS X.

LC_COLLATE se establece en en_US.UTF-8 en OS X, pero ls todavía ordena la antigua forma de POSIX . ¿Alguien sabe cómo puedo hacer que esto se comporte más como Linux?

    
pregunta Emil 13.10.2011 - 22:23

10 respuestas

15

Puede que no sea posible:

  

Mirando el código fuente para ls , usa strcoll para ordenar   los nombres de archivo, y por lo tanto deben respetar LC_COLLATE.

     

Algunas publicaciones en línea sugieren que los locales en BSD (y Darwin / OS X)   son algo rotos en comparación con los de Linux. Escribi un rapido   programa de clasificación de mi propio que establece explícitamente su configuración regional y probado   utilizando las configuraciones regionales en_US.UTF-8 y C en mi máquina (Mac OS   10.6.3) y una máquina universitaria (Linux, FC11?). Mientras que la clasificación funciona como se espera en la máquina linux, ("a B c" vs "B a c"), el mac siempre   los clasifica como "B a c".

Fuente: enlace

RESPUESTA ORIGINAL

Este comando no ordena los archivos de puntos, pero muestra listados de directorios adicionales

ls -f1 

Me acerqué a esto:

.
..
.stuff
foo
Foobar
MyStuff
test.txt
    
respondido por el Sairam 11.02.2013 - 20:07
6

Sé que esto ha sido respondido pero este trabajo es mejor para mí:

ls -f1 -alF -G

Enumera todos los detalles y los ordena ignorando el caso.

    
respondido por el Jared Burrows 25.02.2014 - 18:56
4

Agregando a lo que Mike escribió anteriormente, lo he llevado un poco más lejos y he encontrado una manera de definir tus propias reglas de compilación.

Las definiciones de locale se encuentran en / usr / share / locale /. Cada carpeta es una configuración regional y tiene un archivo (o un enlace) LC_COLLATE, que define qué símbolos son "iguales" (por ejemplo, que U, u y ü deben considerarse iguales al ordenar). Puede duplicar un directorio y esto creará una nueva definición de configuración regional:

$ sudo cp -R en_GB.UTF-8/ en_GB.UTF-8-CI/

Ahora tendrás una nueva configuración regional llamada 'en_GB.UTF-8-CI' ('CI' para no distinguir mayúsculas y minúsculas) y puedes usar LC_COLLATE desde allí.

Ahora, para cambiar LC_COLLATE en la nueva configuración regional, puede descargar las fuentes de configuración regional desde enlace , edite el más cercano a lo que quieres y ejecuta

$ colldef < <new collation file>
$ sudo cp LC_COLLATE /usr/share/locale/en_GB.UTF-8-CI/

y ahora cuando corras

$ LC_COLLATE=en_GB.UTF-8-CI ls

tendrá que clasificar de acuerdo con sus reglas.

Sí, esto es lo que se necesita para que 'ls' no distinga entre mayúsculas y minúsculas.

    
respondido por el Dmitry 24.11.2014 - 14:24
3

Esto me ha estado molestando por un tiempo, y finalmente lo resolví (je). Después de probar un montón de sugerencias que no funcionaron, esto es lo que hizo.

Si estás dispuesto a instalar MacPorts (o Homebrew o Fink), la versión GNU de ls hace exactamente lo que quieres. Yo uso MacPorts, yo mismo, así que ese es el enfoque que explicaré:

  1. Descarga e instala MacPorts:

    enlace

  2. Instala el paquete GNU Coreutils:

    sudo port install coreutils

  3. Ahora debería tener GNU ls: gls . Pruébelo en un directorio que contenga elementos que comiencen con mayúsculas y minúsculas:

    gls -U

    (La opción -U en realidad significa "sin clasificar", pero en OS X tiene el efecto deseado de hacer que sea insensible a las mayúsculas.)

  4. Agregue este alias en su .bash_profile para que el ls funcione de la manera que desea (me gusta la salida de color, pero puede omitir eso si lo desea; solo necesita el -U ):

    alias ls='gls -U --color'

Tenga en cuenta que la opción -U probablemente no funcione en otras plataformas. En OS X, parece que siempre hace lo correcto (tal vez porque HFS + no distingue mayúsculas y minúsculas, técnicamente), pero si lo prueba en una caja de Linux, es muy probable que los resultados no sean ordenado en absoluto.

    
respondido por el Jason Sims 19.02.2014 - 21:33
2

Como solución alternativa, puede utilizar una función y un alias:

function lssorted() { /bin/ls "$@" | sort -f ;}
alias ls='lssorted'

Esto produce una salida ordenada por mayúsculas insensiblemente para el comando ls estándar.

    
respondido por el Arne 21.12.2011 - 11:13
2

Utilizando

ls -f

funciona para mí.

-f oficialmente desactiva cualquier clasificación, pero parece que entonces la clasificación original de HFS brilla, que es exactamente una clasificación que no distingue entre mayúsculas y minúsculas.

Supongo que, en realidad, depende de si tiene o no su formato HD distingue entre mayúsculas y minúsculas, pero como el formato HFS sensible a mayúsculas y minúsculas es el predeterminado para los discos del sistema Mac OS X, esto debería funcionar para la mayoría de los usuarios.

    
respondido por el Jpsy 06.10.2014 - 17:08
0

Ejecutar:

$ type ls

Probablemente encontrará que su comando ls tiene un alias.

    
respondido por el MikeyB 13.10.2011 - 23:25
0

Si le preocupa principalmente el orden de los archivos de puntos, puede ordenar por extensión : use el comando ls en GNU Fileutils con la opción --sort=extension . (Puede instalar GNU Fileutils, por ejemplo, a través de macports).

    
respondido por el halloleo 21.12.2011 - 10:24
0

ls se clasifica de acuerdo con LC_COLLATE, es solo que la mayoría de los archivos de LC_COLLATE están configurados para hacer una clasificación sensible a mayúsculas y minúsculas. enlace

Hay dos que están configurados para una clasificación que no distingue entre mayúsculas y minúsculas: cs_CZ.ISO8859-2 y et_EE.ISO8859-15 et_EE.ISO8859.15 no clasifica "Z" de la forma en que lo desean los hablantes de inglés. cs.CZ.ISO8859-15 hace un buen trabajo con el alfabeto, solo deseo que clasifique "~" antes de los caracteres alfabéticos.

Mi solución es: LC_COLLATE = cs_CZ.ISO8859-2 / bin / ls -FG

Me pregunto si un archivo LC_COLLATE personalizado podría hacerse para manejar "." de la forma que desee y "~" de la forma que yo quiero.

    
respondido por el Mike 29.07.2014 - 05:57
0

Inspirado por la respuesta de Mike, agregué lo siguiente a / etc / bashrc, y funciona muy bien en Mojave. Enumera los archivos ocultos al final cuando se agrega -a, pero eso no me molesta.

export LC_COLLATE="cs_CZ.ISO8859-2"; alias ls='ls -lhFG'

Puede ver la nueva configuración ejecutando el comando de configuración regional. Para revertir, simplemente elimine la línea de / etc / bashrc y vuelva a iniciar sesión en el terminal.

$ locale
LANG="en_US.UTF-8"
LC_COLLATE="cs_CZ.ISO8859-2"
LC_CTYPE="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_ALL=

Tenga en cuenta que ni ls -f1 ni ls -f funcionaron para mí en Mojave. Terminé con una lista verdaderamente sin clasificar. Sólo la solución que he proporcionado funcionó para mí en Mojave.

    
respondido por el Jer 07.12.2018 - 06:19

Lea otras preguntas en las etiquetas