我正在尝试在 Ubuntu Xenial 中按自然顺序按字母顺序对文件(包括隐藏文件)进行排序。
我做到了:
ls -l1va
哪个打印:
.
..
.ICEauthority
.Private
.Xauthority
.atom
.babel.json
.bashrc
.bash_history
.bash_logout
.cache
.cargo
.config
.dbeaver4
.dbeaver-drivers
.dbus
.docker
.eclipse
.ecryptfs
.electron
.fltk
.gconf
.gem
.gimp-2.8
.gitconfig
.gksu.lock
.gnome
.gnome2
.gnome2_private
.gnupg
.local
.mozilla
.nano
.node-gyp
.npm
.nvm
.pki
.profile
.putty
.recently-used
.selected_editor
.ssh
.sudo_as_admin_successful
.thumbnails
.v8flags.6.2.414.32-node.8.4654dce123559e380233361202560f0e.json
.vmware
.vscode
.vscode-insiders
.wget-hsts
.xsession-errors
.xsession-errors.old
.yarn
.yarnrc
Desktop
Documents
Downloads
Music
Pictures
Projects
Public
Templates
Videos
bin
mnt
tmp
如何使排序不区分大小写并按字母而不是 ASCII 表中的位置排序(我认为这就是使 Z 位于 a 之前的原因)..?
答案1
排序顺序取决于区域设置。默认C
区域设置按照您的示例进行排序:
$ LC_COLLATE=C ls -A
.hidden Zappa aardvark vent water zebra
但许多其他人优先考虑字母,而忽略大小写和前导句点:
$ LC_COLLATE=en_US.UTF-8 ls -A
aardvark .hidden vent water Zappa zebra
(如果某些语言环境也考虑像这样的字符,我不会感到惊讶v和w平等,但我想不出一个可以做到这一点的。)
当然,您的系统上需要有这些区域设置。locale -a
应该显示系统当前可用的区域设置,您可以使用locale-gen $localename
它来生成您缺少的区域设置。然后显示dpkg-reconfigure locales
一个列表,您可以在其中选择要生成的区域设置。
答案2
设置$LC_COLLATE
为适当的值将适当地整理名称。
LC_COLLATE=en_US ls -l1va
另外,也可以在shell的启动脚本中设置,以便每次生效。
export LC_COLLATE=en_US
答案3
从 Ubuntu 19.10 开始,设置LC_COLLATE=C
似乎不够,但设置LC_ALL=C
似乎有效(例如ls
将使用 ASCII 顺序作为文件和目录名称)。
答案4
答案并不容易找到,但它就在 Stack Exchange 上。
“修复”涉及编辑 /usr/share/i18n/locales/iso14651_t1_common,并更改行
<U002E> IGNORE;IGNORE;IGNORE;<U002E> # 47 .
进入:
<U002E> <RES-1>;IGNORE;IGNORE;<U002E> # 47 .