Скажіть `ls` сортувати за звичайними кодами ASCII, а не" розумно "


13

У мене є кілька файлів і lsсортуємо їх так:

a
_b
c

але я хочу це мати

_b
a
c

Як я можу це зробити?


2
Чи можу я запитати, чому?
RolandiXor

2
Я підкреслюю, щоб позначити спеціальні каталоги, які потрібно перейти до вершини. У папці проектів у мене є proj_a, proj_b та _old_projects. Немає користі, якщо ця папка знаходиться в межах о-проектів.
Мартін Удінг

Відповіді:


9

Як разова команда ви можете це зробити:

LC_COLLATE=C ls

Або ви можете додати export LC_COLLATE="C"до свого .bashrc, щоб зробити його постійним (можливо, в інших місцях можна буде сортувати несподівані результати).

Більше інформації на форумах Ubuntu .


1
Я думаю, що я просто псевдоніму з цим, щоб у нього не було побічних ефектів.
Мартін Удінг

Це не працює для мене. Я отримую це -> paste.pocoo.org/show/403333 (це німецька мова, але це не має значення)
dAnjou

2
@dAnjou LC_COLLATE=Cls встановлює традиційний порядок сортування POSIX, який є ASCII, у якому великі регістри надходять перед підкресленням. Щоб сортувати підкреслення перед великими літерами, вам доведеться потрапити під капот і створити власне визначення локалі під / usr / share / i18n / locales.
misterben

2
Це, можливо, працювало і раніше, але це не працює на Ubuntu 12.04.
Мікель

1
Станом на Ubuntu 14.04, LC_COLLATE=C lsвін не працює, але LC_ALL=C lsпрацює.
jwodder

6

На всякий випадок, якщо для цього немає вбудованого способу, ви можете використати просту заміну sort:

#!/usr/bin/env python

import sys

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

Збережіть його, наприклад, у, /bin/pysortі зробіть його виконуваним ( sudo cp whatever.py /bin/pysortі sudo chmod a+x /bin/pysort) та запустіть як ls | pysort:

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

1
Я, мабуть, поставив би це, ~/binале приємний запас Можливо, краще використовувати глобулінг у python, оскільки вихід ls може бути дивним, якщо ім'я файлу містить новий рядок.
Мартін Удінг

1

ls | sortне зробив би саме те, що потрібно?


1
ні, це класифікує це як "a _b c"
Стефано Палаццо

1
ні! і сортувати також не має можливості для цього :-)
Rinzwind

2
Дивно, що для сортування існує стільки спеціальних способів сортування, але не "значення ASCII" ...
Мартін Удінг,
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.