Mam kilka plików i ls
sortuję je w następujący sposób:
a
_b
c
ale chcę mieć
_b
a
c
Jak mogę to zrobić?
Mam kilka plików i ls
sortuję je w następujący sposób:
a
_b
c
ale chcę mieć
_b
a
c
Jak mogę to zrobić?
Odpowiedzi:
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 .
LC_COLLATE=C
ls 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.
LC_COLLATE=C ls
nie działa, ale LC_ALL=C ls
działa.
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/pysort
i wykonaj jako ( sudo cp whatever.py /bin/pysort
i sudo chmod a+x /bin/pysort
), i uruchom go jako ls | pysort
:
stefano@lenovo:~/t$ ls | pysort
_b
a
c
~/bin
ale 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.
by ls | sort
nie zrobić dokładnie to, co trzeba?