如何在macOS终端中为ls
修复此默认排序行为?我希望结果不区分大小写并且按字母顺序排列。
这里是一个示例,用于说明在具有以下文件/目录的目录中运行ls
时的当前行为和所需行为:Apple_,apple,Basket_,basket
当前行为:
Apple _
购物篮
苹果
购物篮
期望的行为:
Apple _
苹果
购物篮
购物篮
有人知道如何实现这一目标吗?
答案 0 :(得分:2)
您可以这样排序:
$ 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
的原始行为。
答案 1 :(得分:2)
@Yoric非常接近,但是他函数的内容有点错误:确实可以按字母顺序对结果进行排序,但是当使用`-la'标志时,它将弄乱“点”的顺序文件/目录(以点开头的文件/目录)。
我通过改写以下Stack Overflow帖子中的解决方案找到了正确的解决方案:Making the "ls" command sort "a" before "B" (vs a->b->A->B)
在主目录(~/
)中打开/创建您的Shell配置文件。 (此文件在您每次启动Shell时都会自动运行)。这将是:
.bash_profile
(如果未使用配置框架).zshrc
(如果使用zsh 添加以下代码
ls_sort() {
LC_COLLATE=en_US.utf8 ls "$@"
}
alias ls='ls_sort'
感谢@Yoric帮助我获得此解决方案!