Dile a `ls` que ordene por códigos ASCII regulares, no" inteligentemente "


13

Tengo un par de archivos y los lsordena así:

a
_b
c

pero quiero tener

_b
a
c

¿Cómo puedo hacer eso?


2
¿Puedo preguntar por qué?
RolandiXor

2
Uso el guión bajo para denotar directorios especiales que deben ir al principio. En mi carpeta de proyectos, tengo proj_a, proj_b y _old_projects. No sirve de nada si esta carpeta está dentro de los proyectos o.
Martin Ueding

Respuestas:


9

Como comando único, puede hacer esto:

LC_COLLATE=C ls

O puede agregar export LC_COLLATE="C"a su .bashrc para que sea permanente (puede tener resultados inesperados al ordenar en otro lugar).

Más información en los foros de Ubuntu .


1
Supongo que solo alias ls con eso, para que no tenga efectos secundarios.
Martin Ueding

Esto no funciona para mi. Me sale esto -> paste.pocoo.org/show/403333 (es alemán pero no debería importar)
dAnjou

2
@dAnjou LC_COLLATE=Cls establece el orden de clasificación POSIX tradicional, que es por ASCII en el que las mayúsculas aparecen antes del guión bajo. Para que los guiones bajos se ordenen antes de las mayúsculas, debe colocarse debajo del capó y crear una definición de configuración regional personalizada en / usr / share / i18n / locales.
misterben

2
Esto puede haber funcionado en el pasado, pero no funciona en Ubuntu 12.04.
Mikel

1
A partir de Ubuntu 14.04, LC_COLLATE=C lsno funciona, pero lo LC_ALL=C lshace.
jwodder

6

En caso de que no haya una forma integrada de hacer esto, puede usar un reemplazo simple para sort:

#!/usr/bin/env python

import sys

for i in sorted(sys.stdin):
    sys.stdout.write(i)

Guárdelo, por ejemplo, en /bin/pysorty hágalo ejecutable ( sudo cp whatever.py /bin/pysorty sudo chmod a+x /bin/pysort), y ejecútelo como ls | pysort:

stefano@lenovo:~/t$ ls | pysort
_b
a
c

1
Probablemente lo pondría ~/binpero es una buena alternativa. Probablemente sea mejor usar globbing dentro de python ya que la salida de ls puede ser extraña si un nombre de archivo contiene una nueva línea.
Martin Ueding

1

¿ ls | sortNo harías exactamente lo que necesitas?


1
no, eso lo clasifica como "a _b c"
Stefano Palazzo

1
¡No! y ordenar tampoco tiene una opción para esto :-)
Rinzwind

2
Es extraño que la ordenación tenga tantas formas especiales de clasificación, pero no la de "usar el valor ASCII" ...
Martin Ueding
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.