在 Linux 上使用 ls 按字母順序對檔案進行排序?

在 Linux 上使用 ls 按字母順序對檔案進行排序?

我正在嘗試在 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

(如果某些語言環境也考慮像這樣的字符,我不會感到驚訝vw平等,但我想不出一個可以做到這一點的。

當然,您的系統上需要有這些區域設定。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 .

看:https://unix.stackexchange.com/a/361006/262190

相關內容