【问题标题】:Making the "ls" command sort "a" before "B" (vs a->b->A->B)使“ls”命令在“B”之前排序“a”(相对于 a->b->A->B)
【发布时间】:2013-08-27 03:26:42
【问题描述】:

我正在尝试找到一种方法以不区分大小写的方式打印 ls 命令的结果。

当前 ls 命令导致:

Apple
Boy
Chart
Dock
apples
boys
charts
docks

我想要的是这个:

Apple
apples
Boy
boys
Chart
charts
Dock
docks

这可能吗?

【问题讨论】:

  • 有趣;我的一个挫折是我得到了不区分大小写的排序,这让我很恼火,因为我已经习惯于利用区分大小写的版本来获取列表开头以大写字母开头的文件,但是他们不再出现在那里。那是因为我使用了en_US.utf8 语言环境,这基本上是正确的。所以,我同意 Keith 的大部分观点。
  • @LiranH 这怎么可能是重复的?这是 5.5 年前问的。你提到的问题是 3 个月前问的。我认为你已经把它倒过来了。哈哈,这篇文章甚至在你自己的帖子的接受答案中被引用了。
  • @Andrew 我和你的想法一样,但后来 Zoe 在这里stackoverflow.com/a/53836993/2884291 更正了(在这个线程的后面)。

标签: unix command-line terminal


【解决方案1】:

ls(至少如果您使用 GNU coreutils 版本;ls --version 来检查)根据当前语言环境对文件名进行排序。

可用的区域设置因系统而异(locale -a 为列表),但在我的系统上:

LC_COLLATE=en_US.utf8 ls

bB 之前使用aA 对名称进行排序——尽管它可能不是完全按照您要查找的顺序。

即使ls 在多列中列出文件,这也有效,而 sort -f 很难做到这一点。

(我将$LC_COLLATE 设置为C,以便按ASCII 顺序进行区域敏感排序。)

【讨论】:

  • 所以@keith 我做了一个快速的谷歌搜索,但不确定如何更改我的。我认为您可能是正确的,这就是我所需要的,这是否应该在 .bashrc 文件中?看起来我的语言环境设置为:LANG="en_US.UTF-8" LC_COLLATE="en_US.UTF-8"
  • @Andrew:这就像设置任何其他环境变量(不要忘记export)。如果您总是想要相同的设置,将适当的命令添加到您的 .bashrc 可能是要走的路。请注意,您的语言环境也会影响 shell 通配符扩展 (echo *) 甚至 sort 命令。但是有了LC_COLLATE="en_US.UTF-8",你应该得到你想要的订单。你在什么系统上?
  • 现在我使用的是 mac,但问题更多发生在工作中,在 solaris 机器上。
  • @Andrew:好的,我主要使用 Linux。检查您系统的手册页和/或尝试查看ls 和其他命令如何响应区域设置。
  • @Emanuel:是的,我不希望LC_COLLATE=C 为您工作。它对我有用,因为我想要简单的 ASCII 排序,A..Za..z.
【解决方案2】:

只需将结果通过管道发送到sort -f

【讨论】:

    【解决方案3】:

    作为 [Keith Thompson] 回答的后续,我在 Linux 系统上进行了测试, LC_COLLATE=C 对我不起作用,但 LC_COLLATE="en_US.UTF-8" 可以。我在启动脚本中添加了以下内容:

    export LANG=en_US.UTF-8
    export LC_COLLATE="en_US.UTF-8"
    

    这在 OS X 上不起作用。

    【讨论】:

      【解决方案4】:
      # alias ll='(LC_COLLATE=en_US.utf8 && export LC_COLLATE && shopt -s nocaseglob && /bin/ls -alF --color=auto )'
      # ll
      

      【讨论】:

        【解决方案5】:

        添加到 .profile:

        alias llg='ls -ltr | grep -i'
        

        然后你可以使用以下命令:

        llg "week"
        

        【讨论】:

        • tr 选项告诉ls 按时间顺序排序,最旧的在前,最新的在后。 OP 希望按名称排序,不区分大小写。
        猜你喜欢
        • 2014-03-29
        • 1970-01-01
        • 2020-05-16
        • 2021-11-28
        • 1970-01-01
        • 2010-12-08
        • 1970-01-01
        • 2021-10-06
        • 1970-01-01
        相关资源
        最近更新 更多