在此过程中,我搞砸了我的 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
我做了什么让 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
答案1
⚠️ 这个答案有点过时了。请查看其他答案,特别是那些使用别名的答案或者
ls -v
。
尝试添加
export LC_COLLATE="C"
在您的点文件中,或将LC_ALL
分配更改为:
export LC_ALL="C"
这控制字符级别排序的方式 - 虽然默认是对内联点文件进行排序,但这将sort
首先列出点文件。
但是,请注意,这将基本上停止所有支持语言环境的实用程序对您的实际语言环境的支持。
更进一步,引用GNU Coreutils 手册(重点是我的):
如果您使用非 POSIX 语言环境(例如,设置
LC_ALL
为en_US
),那么sort 可能会产生排序不同的输出比你习惯的要多。在这种情况下,将
LC_ALL
环境变量设置为C
。请注意,设置只有两个问题。首先,如果也设置了 ,则LC_COLLATE
无效。其次,如果(或,如果未设置) 设置为不兼容的值,则会产生未定义的行为。例如,如果是但是,则会产生未定义的行为。LC_ALL
LC_CTYPE
LANG
LC_CTYPE
LC_CTYPE
ja_JP.PCK
LC_COLLATE
en_US.UTF-8
答案2
ls
为了避免在没有实际需要的情况下进行任何系统范围的更改,可以通过将别名添加到以下内容来仅更改当前用户的工作方式.bashrc
:
alias ll='LC_COLLATE=C ls -alF'
这将首先对点文件进行排序,以便正确处理(显示和排序)“不常见”字符集,如西里尔字母。唯一的问题是排序将区分大小写。
答案3
ls(1) 手册页列出:
-v 对文本中的(版本)数字进行自然排序
这似乎改变了句点的排序方式,并首先对点文件进行分组。我有:
alias ls='ls -vAF'
alias ll='ls -l'
在我的 ~/.bashrc 中。
答案4
一个不寻常的想法
免责声明:这对你们大多数人来说可能有点过分。但我从 1995 年起就一直这样做,而且我有能力让我的世界完全按照我的意愿发展。那么,我为什么不呢?
我非常喜欢使用不同的排序方法ls
,尤其是-rt
(按r
反向修改t
格式排序)。所以,我决定尝试一些疯狂的事情,并使用 awk 进行排序。
# save as ~/.ls.awk
# inpsired by http://superuser.com/questions/448291/how-can-i-make-ls-show-dotfiles-first
{
if($1 == "total"){
print $0
next
}
# may need to adjust $9 to match your name column
if(match($9, /^(\033\[[0-9]*m)*\./)) # optionally look past xterm highlighting like: ^[[34m
df[++dd] = $0
else
nf[++nn] = $0
}
END{
while (++d in df)
print df[d]
while (++n in nf)
print nf[n]
}
现在,我不再定义 bash 别名,而是定义 bash 函数(因为别名只能在末尾附加参数,但函数可以在任何地方使用它们)
ll(){ CLICOLOR_FORCE=1 ls -lhA $* | awk -f ~/.ls.awk; }
查看结果
让我们创建一些示例文件:
for n in 4 .4 3 .3 2 .2 1 .1; do touch $n; sleep 1; done
使用普通的 ls
$ ls -lA
total 8
-rw-r--r-- 1 bbronosky staff 0 Dec 1 00:25 .1
-rw-r--r-- 1 bbronosky staff 0 Dec 1 00:25 .2
-rw-r--r-- 1 bbronosky staff 0 Dec 1 00:25 .3
-rw-r--r-- 1 bbronosky staff 0 Dec 1 00:25 .4
-rwxr-xr-x 1 bbronosky staff 285 Nov 29 13:14 .ls.awk
-rwxr-xr-x 1 bbronosky staff 0 Dec 1 00:25 1
-rwxr-xr-x 1 bbronosky staff 0 Dec 1 00:25 2
-rwxr-xr-x 1 bbronosky staff 0 Dec 1 00:25 3
-rwxr-xr-x 1 bbronosky staff 0 Dec 1 00:25 4
$ ls -lArt
total 8
-rwxr-xr-x 1 bbronosky staff 285 Nov 29 13:14 .ls.awk
-rwxr-xr-x 1 bbronosky staff 0 Dec 1 00:25 4
-rw-r--r-- 1 bbronosky staff 0 Dec 1 00:25 .4
-rwxr-xr-x 1 bbronosky staff 0 Dec 1 00:25 3
-rw-r--r-- 1 bbronosky staff 0 Dec 1 00:25 .3
-rwxr-xr-x 1 bbronosky staff 0 Dec 1 00:25 2
-rw-r--r-- 1 bbronosky staff 0 Dec 1 00:25 .2
-rwxr-xr-x 1 bbronosky staff 0 Dec 1 00:25 1
-rw-r--r-- 1 bbronosky staff 0 Dec 1 00:25 .1
使用我的 awk 过滤函数
$ ll
total 8
-rw-r--r-- 1 bbronosky staff 0B Dec 1 00:25 .1
-rw-r--r-- 1 bbronosky staff 0B Dec 1 00:25 .2
-rw-r--r-- 1 bbronosky staff 0B Dec 1 00:25 .3
-rw-r--r-- 1 bbronosky staff 0B Dec 1 00:25 .4
-rwxr-xr-x 1 bbronosky staff 285B Nov 29 13:14 .ls.awk
-rwxr-xr-x 1 bbronosky staff 0B Dec 1 00:25 1
-rwxr-xr-x 1 bbronosky staff 0B Dec 1 00:25 2
-rwxr-xr-x 1 bbronosky staff 0B Dec 1 00:25 3
-rwxr-xr-x 1 bbronosky staff 0B Dec 1 00:25 4
$ ll -rt
total 8
-rwxr-xr-x 1 bbronosky staff 285B Nov 29 13:14 .ls.awk
-rw-r--r-- 1 bbronosky staff 0B Dec 1 00:25 .4
-rw-r--r-- 1 bbronosky staff 0B Dec 1 00:25 .3
-rw-r--r-- 1 bbronosky staff 0B Dec 1 00:25 .2
-rw-r--r-- 1 bbronosky staff 0B Dec 1 00:25 .1
-rwxr-xr-x 1 bbronosky staff 0B Dec 1 00:25 4
-rwxr-xr-x 1 bbronosky staff 0B Dec 1 00:25 3
-rwxr-xr-x 1 bbronosky staff 0B Dec 1 00:25 2
-rwxr-xr-x 1 bbronosky staff 0B Dec 1 00:25 1
您可以在此处查看我的实现https://github.com/RichardBronosky/dotfiles/commit/6170c0a9
最重要的是,它是一个调整输出的框架ls
。您可以使用该 awk 过滤器做任何您想做的事情。您可能希望它是目录,然后是点文件,然后是其他所有内容。一旦您知道如何处理 xterm 颜色,就不会太难了。这完全取决于您。