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


13

我有几个文件,并对ls它们进行如下排序:

a
_b
c

但我想要

_b
a
c

我怎样才能做到这一点?


2
我可能会问为什么?
RolandiXor

2
我使用下划线表示需要转到顶部的特殊目录。在我的项目文件夹中,我有proj_a,proj_b和_old_projects。如果此文件夹在o项目中,则没有用。
马丁·乌丁2011年

Answers:


9

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

LC_COLLATE=C ls

或者,您可以添加export LC_COLLATE="C".bashrc以使其永久(可能会在其他地方进行排序而产生意外结果)。

有关Ubuntu论坛的更多信息。


1
我想我只是将ls用作别名,这样就不会有副作用。
Martin Ueding 2011年

这对我不起作用。我知道了-> paste.pocoo.org/show/403333(德语,但这没关系)
dAnjou 2011年

2
@dAnjou LC_COLLATE=Cls设置传统的POSIX排序顺序,该顺序由ASCII组成,其中大写字母位于下划线之前。要使下划线在大写字母之前排序,您必须在帽子下,并在/ usr / share / i18n / locales下创建自定义语言环境定义。
misterben 2011年

2
这可能在过去有效,但在Ubuntu 12.04上无效。
Mikel 2012年

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/pysortsudo chmod a+x /bin/pysort),然后将其运行为ls | pysort

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

1
我可能会把它放在一个~/bin很好的后备中。最好在python中使用globbing,因为如果文件名包含换行符,ls的输出可能会很奇怪。
马丁·乌丁2011年

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.