告诉 `ls` 按常规 ASCII 代码排序,而不是“智能”排序

Mar*_*ing 13 ls

我有几个文件并ls像这样对它们进行排序:

a
_b
c
Run Code Online (Sandbox Code Playgroud)

但我想拥有

_b
a
c
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到这一点?

mis*_*ben 9

作为一次性命令,您可以执行以下操作:

LC_COLLATE=C ls

或者您可以添加export LC_COLLATE="C"到您的 .bashrc 中以使其永久化(可能会在其他地方排序出现意外结果)。

有关Ubuntu 论坛的更多信息。

  • @dAnjou `LC_COLLATE=C` ls 设置传统的 POSIX 排序顺序,即按 ASCII 排序,其中大写在下划线之前。要在大写之前对下划线进行排序,您必须进入引擎盖并在 /usr/share/i18n/locales 下创建自定义语言环境定义。 (2认同)
  • 这在过去可能有效,但不适用于 Ubuntu 12.04。 (2认同)

Ste*_*zzo 6

以防万一没有内置的方法来做到这一点,你可以使用一个简单的替换sort

#!/usr/bin/env python

import sys

for i in sorted(sys.stdin):
    sys.stdout.write(i)
Run Code Online (Sandbox Code Playgroud)

例如,将其保存在 at/bin/pysort并使其可执行(sudo cp whatever.py /bin/pysortsudo chmod a+x /bin/pysort),然后将其运行为ls | pysort

stefano@lenovo:~/t$ ls | pysort
_b
a
c
Run Code Online (Sandbox Code Playgroud)