40 votos

Ordenación de ls sin distinción de mayúsculas y minúsculas en Mac OSX

¿Cómo puedo hacer que el ls en Max OS X Lion ordenar los archivos y directorios de forma similar a como lo hace Ubuntu Linux (sin distinción de mayúsculas y minúsculas, directorios NO en la parte superior, archivos de puntos NO en la parte superior)? Idealmente, me gustaría hacer esto sin la canalización de la salida a otro comando, como la clasificación.

Por ejemplo, quiero ver:

foo
Foobar
MyStuff/
.stuff/
test.txt

en lugar de:

.stuff
Foobar
MyStuff/
foo
test.txt

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

LC_COLLATE se ajusta a en_US.UTF-8 en OS X, pero ls todavía clasifica el viejo POSIX manera. ¿Alguien sabe cómo puedo hacer que esto se comporte más como Linux?

20voto

Joel Meador Puntos 1804

Puede que no sea posible:

Al echar un vistazo a la código fuente de ls utiliza strcoll para ordenar los nombres de los archivos, por lo que debe respetar LC_COLLATE.

Algunas publicaciones en línea sugieren que las localizaciones en BSD (y Darwin/OS X) están algo rotas en comparación con las de Linux. Escribí un rápido programa de programa de clasificación propio que establece explícitamente su configuración regional y lo probé y lo probé usando las localizaciones en_US.UTF-8 y C en mi máquina (Mac OS 10.6.3) y en una máquina de la universidad (Linux, FC11?). Mientras que la ordenación funciona como se espera en la máquina linux, ("a B c" vs "B a c"), el mac siempre siempre los clasifica como "B a c".

Fuente: http://ask.metafilter.com/130292/CaseInsensitive-LS-on-Mac-OS-X

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

6voto

Son Goku Puntos 21

Sé que esto ha sido respondido pero esto funciona mejor para mí:

ls -f1 -alF -G

Enumera todos los detalles y los ordena por caso ignorado.

5voto

FogleBird Puntos 628

Esto me ha estado molestando durante un tiempo, y finalmente lo he solucionado (jeje). 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 mismo uso MacPorts, así que ese es el enfoque que explicaré:

  1. Descarga e instala MacPorts:

    http://www.macports.org

  2. Instale 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 letras mayúsculas y minúsculas:

    gls -U

    (El -U significa en realidad "sin clasificar", pero en OS X eso tiene el efecto deseado de hacer que no se distinga entre mayúsculas y minúsculas).

  4. Añade este alias en tu .bash_profile por lo que el regular ls funcionará como tú quieras (a mí me gusta la salida de color, pero puedes omitirla si quieres; sólo necesitas el -U ):

    alias ls='gls -U --color'

Tenga en cuenta que el -U probablemente no funcione en otras plataformas. En OS X, siempre parece hacer lo correcto (tal vez porque HFS+ no distingue entre mayúsculas y minúsculas, técnicamente), pero si lo intentas en un equipo Linux, lo más probable es que los resultados no se ordenen en absoluto.

4voto

user102111 Puntos 6

Además de lo que escribió Mike más arriba, lo he llevado un poco más lejos y he encontrado una forma de definir tus propias reglas de cotejo.

Las definiciones de localización 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 ü se consideren iguales al ordenar). Puedes duplicar un directorio y esto creará una nueva definición de locale:

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

Ahora tendrás una nueva localización llamada 'en_GB.UTF-8-CI' ('CI' para no distinguir entre mayúsculas y minúsculas) y podrás usar LC_COLLATE desde ahí.

Ahora, para cambiar LC_COLLATE en la nueva configuración regional, puede descargar las fuentes de la configuración regional desde http://www.opensource.apple.com/source/adv_cmds/adv_cmds-119/usr-share-locale.tproj/colldef/ edita el que más se acerque 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 se ejecuta

$ LC_COLLATE=en_GB.UTF-8-CI ls

tendrá una clasificación según su reglas.

Sí, esto es lo que hace falta para que la ordenación 'ls' no distinga entre mayúsculas y minúsculas.

2voto

Arne Puntos 928

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

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

Esto produce una salida insensiblemente ordenada para el comando estándar ls.

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X