ls列出的文件顺序不正确

时间:2018-08-27 01:04:13

标签: bash sorting ls

当我在bash中键入ls时,默认情况下,它应该以字母顺序检索文件和目录的名称。

不幸的是,我得到以下结果:

--  ---  00  -01  01  -02 

我期望的结果是:

--  ---  -01  -02  00  01  

文件名中的-字符使默认排序无法正常工作。我需要使用与php strcmp相同的方法对文件名进行排序。

为什么-字符会导致排序问题?还有其他会引起问题的字符吗?在bash中准确排序文件名的最佳方法是什么?

修改

ls命令在家用计算机上使用Manjaro返回相同的错误结果,并且备份服务器使用ltfp命令返回了同样的错误结果。

在答案中建议使用LC_ALL=C ls -1作为paxdiablo,在对Majaro进行测试时可以使用,但是在使用lftp时不能使它正常工作:

echo $(lftp -e "set ftp:ssl-force true; set ssl:verify-certificate no; cd "$1"; LC_ALL=C ls" -u $username,$password $server)

编辑-已解决

lftp中,cls -l得到正确的顺序以及我需要的全部详细信息。

echo $(lftp -e "set ftp:ssl-force true; set ssl:verify-certificate no; cd "$1"; cls -l" -u $username,$password $server)

1 个答案:

答案 0 :(得分:2)

这与您的语言环境指定的默认排序有关。您可以找出该命令将使用哪种语言环境……嗯,让我想想……是的,就是locale:-)

pax$ locale
LANG=en_AU.UTF-8
LANGUAGE=en_AU:en
LC_CTYPE="en_AU.UTF-8"
LC_NUMERIC="en_AU.UTF-8"
LC_TIME="en_AU.UTF-8"
LC_COLLATE="en_AU.UTF-8"
LC_MONETARY="en_AU.UTF-8"
LC_MESSAGES="en_AU.UTF-8"
LC_PAPER="en_AU.UTF-8"
LC_NAME="en_AU.UTF-8"
LC_ADDRESS="en_AU.UTF-8"
LC_TELEPHONE="en_AU.UTF-8"
LC_MEASUREMENT="en_AU.UTF-8"
LC_IDENTIFICATION="en_AU.UTF-8"
LC_ALL=

如果将语言环境设置为更合理的设置 (a),则会看到它的作用:

pax$ ls
--  ---  00  01  -01  -02
pax$ LANG=C ls
--  ---  -01  -02  00  01

(a)在此问题的上下文中定义为C