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

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

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

a
_b
c

但我想

_b
a
c

我怎样才能做到这一点?

答案1

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

LC_COLLATE=C ls

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

更多信息Ubuntu 论坛

答案2

如果没有内置方法可以执行此操作,您可以使用简单的替代方案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

答案3

不能ls | sort完全满足您的需要吗?

答案4

截至 2024 年,该LC_COLLATE=C ls选项在装有 sort (GNU coreutils) 8.32 和 的 Ubuntu 22.04 上对我来说运行良好LANG=en_GB.UTF-8。但是,如果该选项在您的平台/语言环境中不起作用,您可以使用 perl 轻松完成此操作:

ls | perl -e '@f=sort <>; print @f'

我还很惊讶在手册页中找不到相关选项sort

相关内容