sort 和 ls -- 为什么不先对大写字母进行排序?

elb*_*rna 6 ls sort locale

我想要这样的排序,在小写字母之前使用大写字母:

-rw-r--r--.  1 0 0    183 2014-10-14 20:17 ./CHECKSUMS.md5
-rw-r--r--.  1 0 0    185 2014-10-14 20:17 ./CHECKSUMS.asc
drwxr-xr-x.  2 0 0   4096 2014-10-14 18:01 ./a
-rw-------.  1 0 0 464140 2013-12-16 19:11 ./a/pam-1.1.8-x86_64-2mg.txz
drwxr-xr-x.  2 0 0   4096 2014-10-14 19:55 ./b
-rw-------.  1 0 0 464140 2014-10-14 19:55 ./b/pam-1.1.8-x86_64-2mg.txz
drwxr-xr-x.  2 0 0   4096 2014-10-14 18:00 ./c
drwxr-xr-x.  2 0 0   4096 2014-10-14 18:00 ./d
drwxr-xr-x.  2 0 0   4096 2014-10-14 18:00 ./e
drwxr-xr-x.  2 0 0   4096 2014-10-14 18:00 ./f
drwxr-xr-x.  2 0 0   4096 2014-10-14 18:00 ./g
Run Code Online (Sandbox Code Playgroud)

我使用这个命令:

find -L . -print  | sort -d | xargs ls -nld --time-style=long-iso
Run Code Online (Sandbox Code Playgroud)

结果是:

drwxr-xr-x. 29 0 0   4096 2014-10-14 20:17 .
drwxr-xr-x.  2 0 0   4096 2014-10-14 18:01 ./a
-rw-------.  1 0 0 464140 2013-12-16 19:11 ./a/pam-1.1.8-x86_64-2mg.txz
drwxr-xr-x.  2 0 0   4096 2014-10-14 19:55 ./b
-rw-------.  1 0 0 464140 2014-10-14 19:55 ./b/pam-1.1.8-x86_64-2mg.txz
drwxr-xr-x.  2 0 0   4096 2014-10-14 18:00 ./c
-rw-r--r--.  1 0 0    183 2014-10-14 20:17 ./CHECKSUMS.md5
drwxr-xr-x.  2 0 0   4096 2014-10-14 18:00 ./d
drwxr-xr-x.  2 0 0   4096 2014-10-14 18:00 ./e
drwxr-xr-x.  2 0 0   4096 2014-10-14 18:00 ./f
drwxr-xr-x.  2 0 0   4096 2014-10-14 18:00 ./g
Run Code Online (Sandbox Code Playgroud)

我怎样才能得到我想要的排序顺序?

unx*_*nut 8

检查您的环境变量LC_COLLATE。最简单的方法是使用命令locales。如果需要,您可以将其设置为不同的值。例如,你可以做(​​假设 bash)

export LC_COLLATE="C"
Run Code Online (Sandbox Code Playgroud)

这应该可以解决您的问题。


elb*_*rna 1

最简单的是使用export LC_ALL=C,用ls、sort等制作脚本,然后返回你最喜欢的LC,在我的例子中是UTF8。

  • 最好只为特定的“ls”命令设置排序规则,而不是“export LC_ALL”:“LC_COLLATE=C ls -nl --time-style=long-iso” (4认同)