如何修复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(
步骤:
- 在主目录(
~/
(中打开/创建shell配置文件。(每次启动shell时,该文件都会自动运行(。这将是:
.bash_profile
(如果不使用配置框架(.zshrc
(如果使用zsh(
- 添加以下代码
ls_sort() {
LC_COLLATE=en_US.utf8 ls "$@"
}
alias ls='ls_sort'
- 重新启动终端
感谢@Yoric帮助我获得此解决方案!
以下对我有效:
ls | sort -f