¿Cómo puedo hacer que el ls
comando en Max OS X Lion clasifique los archivos y directorios de manera similar a como lo hace Ubuntu Linux (no distingue entre mayúsculas y minúsculas, los directorios NO están en la parte superior, los archivos de puntos NO están en la parte superior)? 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 ls
orden de clasificación está controlado por la configuración regional del sistema, específicamente LC_COLLATE
. Cuando LC_COLLATE=en_US.UTF-8
, voy a ordenar los elementos como quiero. Cuando LC_COLLATE=C
, ls
se ordenará de manera similar a OS X.
LC_COLLATE
está configurado en_US.UTF-8
en OS X, pero ls
aún se ordena a la antigua POSIX
usanza. ¿Alguien sabe cómo puedo hacer que esto se parezca más a Linux?
Respuestas:
Puede que no sea posible:
Fuente: http://ask.metafilter.com/130292/CaseInsensitive-LS-on-Mac-OS-X
RESPUESTA ORIGINAL
Este comando no clasifica los archivos de puntos, pero muestra listados de directorios adicionales
Me acerqué a esto:
fuente
Sé que esto ha sido respondido, pero esto funciona mejor para mí:
Enumera todos los detalles y los ordena ignorando mayúsculas y minúsculas.
fuente
Esto me ha estado molestando por un tiempo ahora, y finalmente lo resolví (je). Después de probar un montón de sugerencias que no funcionaron, esto es lo que sí funcionó.
Si está dispuesto a instalar MacPorts (o Homebrew, o Fink), la versión GNU de ls hace exactamente lo que desea. Yo uso MacPorts, así que ese es el enfoque que explicaré:
Descargue e instale MacPorts:
http://www.macports.org
Instale el paquete GNU Coreutils:
sudo port install coreutils
Ahora debe tener ls de GNU:
gls
. Pruébelo en un directorio que contiene elementos que comienzan con letras mayúsculas y minúsculas:gls -U
(La
-U
opción en realidad significa "sin clasificar", pero en OS X eso tiene el efecto deseado de hacer que no distinga entre mayúsculas y minúsculas).Agregue este alias en su
.bash_profile
para que el regularls
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
-U
opción probablemente no funcionará 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 prueba en una caja de Linux, los resultados probablemente no sean ordenado en absoluto.fuente
Además de lo que Mike escribió anteriormente, lo llevé un poco más lejos y encontré una manera de definir sus propias reglas de clasificación.
Las definiciones locales 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 realizar el pedido). Puede duplicar un directorio y esto creará una nueva definición de configuración regional:
Ahora tendrá una nueva configuración regional llamada 'en_GB.UTF-8-CI' ('CI' para mayúsculas y minúsculas) y puede 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 http://www.opensource.apple.com/source/adv_cmds/adv_cmds-119/usr-share-locale.tproj/colldef/ , edite la eso es lo más cercano a lo que quieres y correr
y ahora cuando corres
Tendrás que ordenar según tus reglas.
Sí, esto es lo que se necesita para hacer que 'ls' no distinga entre mayúsculas y minúsculas.
fuente
Como solución alternativa, puede usar una función y un alias:
Esto produce una salida ordenada sin distinción entre mayúsculas y minúsculas para el comando ls estándar.
fuente
Utilizando
funciona para mi.
-f apaga oficialmente cualquier clasificación, pero parece que entonces se muestra la clasificación HFS original, que es exactamente una clasificación sin distinción 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.
fuente
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.
Puede ver la nueva configuración ejecutando el comando locale. Para revertir, simplemente quite la línea de / etc / bashrc y vuelva a iniciar sesión en la terminal.
Tenga en cuenta que ni ls -f1 ni ls -f funcionaron para mí en Mojave. Terminé con una lista realmente sin clasificar. Solo la solución que he proporcionado funcionó para mí en Mojave.
fuente
.bashrc
o.zshrc
:alias ls="LC_COLLATE=cs_CZ.ISO8859-2 ls"
Correr:
Probablemente encontrará que su
ls
comando tiene un alias.fuente
ls is /bin/ls
. En OS X:ls is hashed (/bin/ls)
. De cualquier manera, incluso si llamo/bin/ls
directamente, todavía no se ordena de acuerdo con LC_COLLATE.ls
comando tenía el alias para incluir--group-directories-first
. Todavía se puede hacer en otro lugar, solo que no es un alias.Si le preocupa principalmente el orden de los archivos de puntos, puede ordenarlos por extensión : use el
ls
comando de GNU Fileutils con la opción--sort=extension
. (Puede instalar GNU Fileutils, por ejemplo, a través de macports).fuente
ls está ordenando de acuerdo con LC_COLLATE, es solo que la mayoría de los archivos LC_COLLATE están configurados para ordenar con mayúsculas y minúsculas. http://collation-charts.org/fbsd54/
Hay dos que están configurados para la clasificación sin distinción entre mayúsculas y minúsculas: cs_CZ.ISO8859-2 y et_EE.ISO8859-15 et_EE.ISO8859.15 no clasifica "Z" de la manera en que los hablantes de inglés desearían. cs.CZ.ISO8859-15 hace un buen trabajo con el alfabeto, solo desearía que clasificara "~" antes de los caracteres alfabéticos.
Mi solución es: LC_COLLATE = cs_CZ.ISO8859-2 / bin / ls -FG
Me pregunto si se podría hacer un archivo LC_COLLATE personalizado para manejar "". como quieres y "~" como yo quiero.
fuente