使用 ll 时的排序顺序

使用 ll 时的排序顺序

使用该命令时,有没有办法设置文件和目录的排序顺序ll?我有两台 16.04.5 服务器,带有两个ext4驱动器。两个驱动器上都有一个包含相同文件的文件夹。ll在两台服务器上使用时,排序顺序不一样(ls -l结果相同):

ll在服务器a上:

Alex.txt
iBoy.txt
Immatriculation.txt
Radius.txt
WonderWoman.txt

ll在服务器b上:

Alex.txt
Immatriculation.txt
Radius.txt
WonderWoman.txt
iBoy.txt

因此,区别在于文件iBoy.txt。有没有办法找出为什么此文件不在服务器 a 上位于Alex.txt和之间Immatriculation.txt

编辑1:

根据要求,以下是两个系统的语言环境。

locale在服务器a上:

LANG=de_DE.UTF-8
LANGUAGE=
LC_CTYPE="de_DE.UTF-8"
LC_NUMERIC=de_DE.UTF-8
LC_TIME="de_DE.UTF-8"
LC_COLLATE="de_DE.UTF-8"
LC_MONETARY=de_DE.UTF-8
LC_MESSAGES="de_DE.UTF-8"
LC_PAPER=de_DE.UTF-8
LC_NAME=de_DE.UTF-8
LC_ADDRESS=de_DE.UTF-8
LC_TELEPHONE=de_DE.UTF-8
LC_MEASUREMENT=de_DE.UTF-8
LC_IDENTIFICATION=de_DE.UTF-8
LC_ALL=

locale在服务器b上:

locale: Cannot set LC_CTYPE to default locale: No such file or directory
locale: Cannot set LC_MESSAGES to default locale: No such file or directory
locale: Cannot set LC_ALL to default locale: No such file or directory
LANG=de_DE.UTF-8
LANGUAGE=
LC_CTYPE="de_DE.UTF-8"
LC_NUMERIC=de_DE.UTF-8
LC_TIME="de_DE.UTF-8"
LC_COLLATE="de_DE.UTF-8"
LC_MONETARY=de_DE.UTF-8
LC_MESSAGES="de_DE.UTF-8"
LC_PAPER=de_DE.UTF-8
LC_NAME=de_DE.UTF-8
LC_ADDRESS=de_DE.UTF-8
LC_TELEPHONE=de_DE.UTF-8
LC_MEASUREMENT=de_DE.UTF-8
LC_IDENTIFICATION=de_DE.UTF-8
LC_ALL=

答案1

ls' 排序顺序由您的语言环境的排序规则设置定义。您可以使用以下命令轻松检查locale

$ locale
LANG=en_US.UTF-8
LANGUAGE=en_US
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC=de_DE.UTF-8
LC_TIME=de_DE.UTF-8
LC_COLLATE="en_US.UTF-8"
LC_MONETARY=de_DE.UTF-8
LC_MESSAGES="en_US.UTF-8"
LC_PAPER=de_DE.UTF-8
LC_NAME=de_DE.UTF-8
LC_ADDRESS=de_DE.UTF-8
LC_TELEPHONE=de_DE.UTF-8
LC_MEASUREMENT=de_DE.UTF-8
LC_IDENTIFICATION=de_DE.UTF-8
LC_ALL=

对于排序来说,重要的是LC_COLLATE值。在我上面的例子中,它会根据en_US.UTF.8本地化规则进行排序,这将对文件名进行不区分大小写的排序,并且似乎会忽略标点符号。

您可以使用环境变量临时覆盖全局设置。例如,C语言环境/排序规则将按原始 ASCII 值排序,因此所有大写字母都位于小写字母之前。

LC_COLLATE=C ll

相关内容