$ export LC_ALL=en_US.UTF-8
$ ls -al
total 24
drwxr-xr-x 6 pi pi 4096 Jul 23 16:34 .
drwxr-xr-x 9 pi pi 4096 Jul 23 16:33 ..
drwxr-xr-x 2 pi pi 4096 Jul 23 16:33 .A
drwxr-xr-x 2 pi pi 4096 Jul 23 16:33 B
drwxr-xr-x 2 pi pi 4096 Jul 23 16:33 .C
drwxr-xr-x 2 pi pi 4096 Jul 23 16:34 ???
Run Code Online (Sandbox Code Playgroud)
当我更改LC_ALL为 时C,首先列出点文件,unicode 文件名不可读:
$ export LC_ALL=C
$ ls -al
total 24
drwxr-xr-x 6 pi pi 4096 Jul 23 16:34 .
drwxr-xr-x 9 pi pi 4096 Jul 23 16:33 ..
drwxr-xr-x 2 pi pi 4096 Jul 23 16:33 .A
drwxr-xr-x 2 pi pi 4096 Jul 23 16:33 .C
drwxr-xr-x 2 pi pi 4096 Jul 23 16:33 B
drwxr-xr-x 2 pi pi 4096 Jul 23 16:34 ?????????
Run Code Online (Sandbox Code Playgroud)
如何让“ls”首先显示点文件并保留 unicode 文件名?
更新,找到解决方案(感谢 ??????? ????????????? 的回答):
$ cat /etc/default/locale
LANG=en_US.UTF-8
LANGUAGE=en_US.UTF-8
LC_CTYPE=en_US.UTF-8
LC_COLLATE=C
Run Code Online (Sandbox Code Playgroud)
重新启动,显示环境:
$ env | grep -E 'LANG|LC'
LC_COLLATE=C
LANG=en_US.UTF-8
LANGUAGE=en_US.UTF-8
LC_CTYPE=en_US.UTF-8
Run Code Online (Sandbox Code Playgroud)
按预期排序:
$ ls -al
total 24
drwxr-xr-x 6 pi pi 4096 Jul 23 16:34 .
drwxr-xr-x 9 pi pi 4096 Jul 24 08:29 ..
drwxr-xr-x 2 pi pi 4096 Jul 23 16:33 .A
drwxr-xr-x 2 pi pi 4096 Jul 23 16:33 .C
drwxr-xr-x 2 pi pi 4096 Jul 23 16:33 B
drwxr-xr-x 2 pi pi 4096 Jul 23 16:34 ???
Run Code Online (Sandbox Code Playgroud)
没有警告perl -v:
$ perl -v
This is perl 5, version 14, subversion 2 (v5.14.2) built for arm-linux-gnueabihf-thread-multi-64int
(with 80 registered patches, see perl -V for more detail)
Copyright 1987-2011, Larry Wall
Perl may be copied only under the terms of either the Artistic License or the
GNU General Public License, which may be found in the Perl 5 source kit.
Complete documentation for Perl, including FAQ lists, should be found on
this system using "man perl" or "perldoc perl". If you have access to the
Internet, point your browser at http://www.perl.org/, the Perl Home Page.
Run Code Online (Sandbox Code Playgroud)
语言环境C不执行 UTF-8。如果您使用具有正确排序规则设置的 UTF-8 感知区域设置,则ls调用的行为应符合您的预期。(如果您发现自己经常做这种事情,您可以构建自己的语言环境。对于从其他语言环境引入部分的语言环境示例,您可能需要查找en_SE。)
如果您只想根据 C 语言环境进行排序,则不需要设置 LC_ALL(这是所有其他 LC_* 设置的全局覆盖,因此得名),而可以简单地设置LC_COLLATE,这会影响排序(链接是用于 AIX,但总体描述足够一般)。在这种情况下,LC_COLLATE=C ls -al应该足够接近你想要的。
哦哦,你的假设似乎不正确。也就是说,即使没有LC_ALL,我也可以列出中文文件。
\n\nwraptor: ~/tmp/god-damn-mongorians\n$ LC_ALL=C\n\n$ ll\n-rw-r--r-- 1 0K 2013-07-23 12:50 ??????????????????\n\n$ unset LC_ALL\n\n$ ll\n-rw-r--r-- 1 0K 2013-07-23 12:50 \xe6\x88\x91\xe5\xbe\x88\xe5\xa5\xbd\xef\xbc\x8c\xe8\xb0\xa2\xe8\xb0\xa2\n\n$ LANG=en_US.iso-8859-1\n\n$ ll\n-rw-r--r-- 1 0K 2013-07-23 12:50 ?\xe2\x96\x92???\xe2\x96\x92??\xe5\xa5\xbd?\xe2\x96\x92??\xe8\xb0\xa2?\xe8\xb0\xa2\nRun Code Online (Sandbox Code Playgroud)\n\n为了实现您的目标,您需要将 LANG(或 LANGUAGE)设置为具有 UTF 编码的语言环境,并按照我们的瑞典朋友的建议设置 LC_COLLATE。
\n\n$ ll -a\ndrwxr-xr-x+ 1 0K 2013-07-23 12:50 .\ndrwxr-xr-x 1 0K 2013-07-23 12:48 ..\n-rw-r--r-- 1 0K 2013-07-23 12:50 ?\xe2\x96\x92???\xe2\x96\x92??\xe5\xa5\xbd?\xe2\x96\x92??\xe8\xb0\xa2?\xe8\xb0\xa2\n\n$ LANG=en_US.utf-8\n$ LC_COLLATE=C \n\n$ ll -a\ndrwxr-xr-x+ 1 0K 2013-07-23 12:50 .\ndrwxr-xr-x 1 0K 2013-07-23 12:48 ..\n-rw-r--r-- 1 0K 2013-07-23 12:50 \xe6\x88\x91\xe5\xbe\x88\xe5\xa5\xbd\xef\xbc\x8c\xe8\xb0\xa2\xe8\xb0\xa2\nRun Code Online (Sandbox Code Playgroud)\n\n更新: \n根据评论中的请求创建了三个文件夹。
\n\n作为本机 Windows 二进制文件启动。
\n\n
从笔记本电脑启动,显示在 Cygwin 中的 Xwin 下。请注意,当设置 LC_COLLATE 时,文件会“正确”排序。
\n\n

| 归档时间: |
|
| 查看次数: |
3209 次 |
| 最近记录: |