macOS终端:`ls'首先用大写名称对结果进行排序



如何修复macOS终端中ls的默认排序行为?我希望结果不区分大小写并按字母顺序排列。

以下是一个示例,用于说明在包含以下文件/目录的目录中运行ls时的当前和所需行为:Apple_,Apple,Basket_,Basket

当前行为:

Apple_

篮子_

苹果

吊篮

期望行为:

Apple_

苹果

篮子_

吊篮


有人知道如何做到这一点吗?

您可以这样排序:

$ mkdir testdir && cd testdir
$ touch apple basket Apple_ Basket_
$ ls | LC_COLLATE=C sort --ignore-case

输出(实际上并不完全是预期结果(:

Apple
apple_
basket
Basket_

更新

为了使其成为ls的默认行为,您可以将这段代码添加到文件~/.bash_profile中(打开新的终端窗口后将生效(:

ls_sort() {
ls $1 | LC_COLLATE=C sort --ignore-case
}
alias ls='ls_sort'

实际上,您可以在上面的最后一行中将别名命名为lss,而不是ls,这样就不会丢失ls的原始行为。

这不再有效

因此@Yoric非常接近,但他的函数的内容有点错误:它确实会按字母顺序对结果进行排序,但当使用"-la"标志时,它会打乱"的顺序;点";文件/目录(以句点开头的文件/目录(。

我通过调整以下Stack Overflow帖子中的解决方案找到了正确的解决方案:;ls〃;命令排序";a";在";B";(与a->b->a->b(

步骤:

  1. 在主目录(~/(中打开/创建shell配置文件。(每次启动shell时,该文件都会自动运行(。这将是:
  • .bash_profile(如果不使用配置框架(
  • .zshrc(如果使用zsh(
  1. 添加以下代码

ls_sort() {
LC_COLLATE=en_US.utf8 ls "$@"
}
alias ls='ls_sort'

  1. 重新启动终端

感谢@Yoric帮助我获得此解决方案!

以下对我有效:

ls | sort -f

最新更新