Powiedz „ls”, aby sortowało według zwykłych kodów ASCII, a nie „inteligentnie”

13

Mam kilka plików i lssortuję je w następujący sposób:

a
_b
c

ale chcę mieć

_b
a
c

Jak mogę to zrobić?

Martin Ueding
źródło
2
Czy mogę zapytać dlaczego?
RolandiXor
2
Używam podkreślnika do oznaczania specjalnych katalogów, które muszą przejść na górę. W folderze moich projektów mam projekty proj_a, proj_b i _old_projects. Nie ma sensu, jeśli ten folder jest w ramach o-projektów.
Martin Ueding

Odpowiedzi:

9

Jako jednorazowe polecenie możesz to zrobić:

LC_COLLATE=C ls

Możesz też dodać export LC_COLLATE="C"do .bashrc, aby ustawić go na stałe (może mieć nieoczekiwane sortowanie wyników w innym miejscu).

Więcej informacji na forach Ubuntu .

misterben
źródło
1
Sądzę, że po prostu alias z tym, aby nie miał skutków ubocznych.
Martin Ueding
To mi nie działa. Rozumiem -> paste.pocoo.org/show/403333 (to niemiecki, ale to nie powinno mieć znaczenia)
dAnjou,
2
@dAnjou LC_COLLATE=Cls ustawia tradycyjny porządek sortowania POSIX, według ASCII, w którym wielkie litery występują przed podkreśleniem. Aby posortować podkreślenia przed dużymi literami, musisz znaleźć się pod maską i utworzyć niestandardową definicję ustawień regionalnych w / usr / share / i18n / locales.
misterben
2
Mogło to działać w przeszłości, ale nie działa na Ubuntu 12.04.
Mikel
1
Począwszy od Ubuntu 14.04, LC_COLLATE=C lsnie działa, ale LC_ALL=C lsdziała.
jwodder
6

Na wypadek, gdyby nie było wbudowanego sposobu, możesz użyć prostego zamiennika dla sort:

#!/usr/bin/env python

import sys

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

Zapisz go, na przykład, w /bin/pysorti wykonaj jako ( sudo cp whatever.py /bin/pysorti sudo chmod a+x /bin/pysort), i uruchom go jako ls | pysort:

stefano@lenovo:~/t$ ls | pysort
_b
a
c
Stefano Palazzo
źródło
1
Prawdopodobnie włożyłbym to, ~/binale niezły awaria. Prawdopodobnie lepiej jest używać globowania w pythonie, ponieważ wyjście ls może być dziwne, jeśli nazwa pliku zawiera nowy wiersz.
Martin Ueding
1

by ls | sortnie zrobić dokładnie to, co trzeba?

Philippe De Brouwer
źródło
1
nie, to sortuje to jako „a _b c”
Stefano Palazzo
1
Nie! i sort również nie ma na to opcji :-)
Rinzwind
2
Dziwne, że sortowanie ma tak wiele specjalnych sposobów sortowania, ale nie „użyj wartości ASCII”…
Martin Ueding