Making the “ls” command sort “a” before “B” (vs a-

2019-06-27 03:24发布

I am trying to find a way to have the results of an ls command be printed in a case insensitive manner.

currently an ls command results in:

Apple
Boy
Chart
Dock
apples
boys
charts
docks

what i want is this:

Apple
apples
Boy
boys
Chart
charts
Dock
docks

is this possible?

5条回答
Rolldiameter
2楼-- · 2019-06-27 04:06

As a follow up to [Keith Thompson]'s answer, I tested on a Linux system and LC_COLLATE=C did not work for me, but LC_COLLATE="en_US.UTF-8" did. I put the following in my startup script:

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

This did not work on OS X.

查看更多
劫难
3楼-- · 2019-06-27 04:18

ls (at least if you're using the GNU coreutils version; ls --version to check that) sorts file names according to the current locale.

The set of available locales varies from system to system (locale -a for a list), but on my system this:

LC_COLLATE=en_US.utf8 ls

sorts names with a and A before b and B -- though it might not be exactly in the order you're looking for.

This works even when ls lists files in multiple columns, something that's difficult to do with sort -f.

(I have $LC_COLLATE set to C specifically so that locale-sensitive sorting is done in ASCII order.)

查看更多
4楼-- · 2019-06-27 04:27

Just pipe the result to sort -f.

查看更多
【Aperson】
5楼-- · 2019-06-27 04:28
# alias ll='(LC_COLLATE=en_US.utf8 && export LC_COLLATE && shopt -s nocaseglob && /bin/ls -alF --color=auto )'
# ll
查看更多
神经病院院长
6楼-- · 2019-06-27 04:28

Add to .profile:

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

then you can use following command:

llg "week"
查看更多
登录 后发表回答