使“ls”命令将“a”排序在“B”之前(与a->b->A->B)

问题描述 投票:0回答:7

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

当前 ls 命令的结果是:

Apple
Boy
Chart
Dock
apples
boys
charts
docks

我想要的是这个:

Apple
apples
Boy
boys
Chart
charts
Dock
docks

这可能吗?

unix command-line terminal
7个回答
18
投票

ls
(至少如果您使用的是 GNU coreutils 版本;
ls --version
检查这一点)根据当前区域设置对文件名进行排序。

可用区域设置集因系统而异(

locale -a
用于列表),但在我的系统上:

LC_COLLATE=en_US.utf8 ls

将名称中的

a
A
排在
b
B
之前 - 尽管它可能不完全按照您要查找的顺序

即使当

ls

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

(我专门将

$LC_COLLATE

 设置为 
C
,以便以 ASCII 顺序完成区域设置敏感排序。)


7
投票
只需将结果通过管道传输到

sort -f


    


1
投票
作为 [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 上不起作用。


0
投票
# alias ll='(LC_COLLATE=en_US.utf8 && export LC_COLLATE && shopt -s nocaseglob && /bin/ls -alF --color=auto )' # ll
    

0
投票
ls --format=单列 |排序-f


0
投票
我刚刚遇到了同样的问题...这帮助我修复/重置了语言环境:

sudo dpkg-reconfigure locales
    

-2
投票
添加到.profile:

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

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

llg "week"
    
© www.soinside.com 2019 - 2024. All rights reserved.