如何让“ls”首先显示点文件?

cla*_*234 54 linux debian ls dotfiles

一路上我搞砸了我的 ls 命令,现在我在运行时得到了这个命令

$ ls -AhHl --color=auto
-rwxr-xr-x 1 clang clang  640 Mar  1 02:46 apple-touch-icon-precomposed.png
-rwxr-xr-x 1 clang clang  784 Jul 12 02:54 crossdomain.xml
-rwxr-xr-x 1 clang clang 1.2K Mar  1 02:46 favicon.ico
drwxr-xr-x 8 clang clang 4.0K Jul 12 23:50 .git
-rw-r--r-- 1 clang clang   17 Feb 29 19:48 .gitignore
-rwxr-xr-x 1 clang clang 1.4K Jul 12 02:54 humans.txt
Run Code Online (Sandbox Code Playgroud)

我做了什么让 ls 忽略点文件而是按第一个字母排序?

的输出locale

$ locale
LANG=
LANGUAGE=
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=en_US.UTF-8
Run Code Online (Sandbox Code Playgroud)

slh*_*hck 51

?? 这个答案有点过时了。请查看其他答案,尤其是那些使用别名ls -v.


尝试添加

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

在您的点文件中,或将LC_ALL分配更改为:

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

这控制了字符级排序的工作方式——默认情况下是对内联点文件进行排序,这将sort首先列出点文件。

但是,请注意,这将基本上停止对所有区域设置感知实用程序的实际区域设置的支持。


更进一步,引用GNU Coreutils 手册(强调我的):

如果您使用非 POSIX 语言环境(例如,通过设置LC_ALLen_US),则sort 可能会产生与您习惯的排序不同的输出

在这种情况下,请将LC_ALL环境变量设置为C. 注意设置只有LC_COLLATE两个问题。首先,如果LC_ALL也设置了则无效。其次,如果LC_CTYPE(或LANG,如果LC_CTYPE未设置)设置为不兼容的值,则它具有未定义的行为。例如,如果LC_CTYPEis ja_JP.PCKbut LC_COLLATEis ,您会得到未定义的行为en_US.UTF-8

  • 设置 LC_ALL="C" 将 `ls` 外语(例如日语)unicode 文件名作为 `??????????` (9认同)
  • 设置 LC_ALL="C" 成功了!感谢您及时的回复 (2认同)
  • 我认为这个答案有点过时了。至少使用`C.UTF-8`,如@Faroul的[答案](https://superuser.com/a/656746/238591),因为旧的非Unicode变体会给Python等东西带来麻烦3输出。但请注意,正如其他人一样,区域设置会影响所有内容,而不仅仅是“ls”,因此将区域设置设置为“C”或“C.UTF-8”将禁用拼写检查。因此,最好适当地设置您的语言环境,例如“en_US.UTF-8”,并寻求仅影响“ls”的解决方案(例如使用别名和“-v”标志,如@VinceValenti的[答案](https: //superuser.com/a/1364549/238591))。 (2认同)

小智 43

为了避免在没有真正需要的情况下进行任何系统范围的更改,您可以ls通过将别名添加到以下来更改当前用户的工作方式.bashrc

alias ll='LC_COLLATE=C ls -alF'

这首先对点文件进行排序,允许正确处理(显示和排序)“不常见”字符集,如西里尔文。排序将区分大小写的唯一罪魁祸首。

来源:http : //ubuntuforums.org/showthread.php?t=816753

  • 这是迄今为止最好的答案 (3认同)
  • 这是最有帮助的答案。此外,在 `LC_ALL` 已经设置为与排序/提升点文件到 `ls` 列表顶部不兼容的环境中,使用 `alias ll='LC_ALL=C ls -alF'` 代替,因为 `LC_COLLATE`不会覆盖`LC_ALL`。 (2认同)

小智 16

ls(1) 联机帮助页列出了:

-v 文本中自然排序的(版本)数字

这似乎改变了句点的排序方式,并首先对点文件进行分组。我有:

alias ls='ls -vAF'
alias ll='ls -l'
Run Code Online (Sandbox Code Playgroud)

在我的 ~/.bashrc 中。


小智 10

环境

LC_ALL="C.UTF-8"
Run Code Online (Sandbox Code Playgroud)

对我来说很好用 - 元音变音和“ls -la”首先列出点文件。

  • dot 文件首先列出,但现在以大写字母开头的文件名列在以小写字母开头的文件名之前。 (3认同)
  • `C.UTF-8` 是无效的语言环境,因此语言环境恢复为 `C`。你仍然失去了对 UTF-8 的支持。事实上,情况更糟,因为`LC_ALL=C` 大多数程序*正确* 地显示了大多数多字节字符,但是使用`LC_ALL=something_invalid` 一些程序却没有(比如`ls)。 (3认同)