你能按名字对ls列表进行排序吗?
我的ls默认按名称排序。你在看什么?
man ls
说:
List information about the FILEs (the current directory by default). Sort entries alpha‐betically if none of -cftuvSUX nor --sort is specified.
:
ls -X可以用于此目的,以防你将别名ls设置为更有用的默认值。
In Debian Jessie, this works nice:
ls -lah --group-directories-first
# l=use a long listing format
# a=do not ignore entries starting with .
# h=human readable
# --group-directories-first=(obvious)
# Note: add -r for reverse alpha
# You might consider using lh by appending to ~/.bashrc as the alias:
~$ echo "alias lh='ls -lah --group-directories-first'" >>~/.bashrc
# -- restart your terminal before using lh command --
对于简单的事情,您可以将ls与sort结合起来。仅供参考文件名列表: ls -1 |分类
要按相反顺序对它们进行排序: ls -1 |排序-r
来自ls
的coreutils
默认执行区域设置感知排序,因此在某些情况下可能会产生令人惊讶的结果(例如,%foo
将在bar
中的quux
和LANG=en_US
之间排序)。如果您想要ASCIIbetical排序,请使用
LANG=C ls
* nix工具的优点是你可以将它们结合起来:
ls -l | sort -k9,9
ls -l
的输出将如下所示
-rw-rw-r-- 1 luckydonald luckydonald 532 Feb 21 2017 Makefile
-rwxrwxrwx 1 luckydonald luckydonald 4096 Nov 17 23:47 file.txt
因此,使用9,9
,您可以将列9
排序到列9
,即文件名。您必须提供停止位置,在这种情况下,该列是相同的列。列以1
开头。
此外,如果要忽略大写/小写,请将--ignore-case
添加到sort命令。
注意:“a”在“Z”之后出现:
$ touch A.txt aa.txt Z.txt
$ ls
A.txt Z.txt aa.txt
从手册页(对于bash ls):
如果没有-cftuSUX或--sort,则按字母顺序对条目进行排序。
只有数字字符串不同的文件可以在此数字前面以分隔符开头的条件进行排序。
在这种情况下,可以使用以下语法:
ls -x1 file | sort -t'<char>' -n -k2
例:
ls -1 TRA*log | sort -t'_' -n -k2
TRACE_1.log
TRACE_2.log
TRACE_3.log
TRACE_4.log
TRACE_5.log
TRACE_6.log
TRACE_7.log
TRACE_8.log
TRACE_9.log
TRACE_10.log
检查.bashrc
文件中的别名。
ls
实用程序应符合IEEE Std 1003.1-2001(POSIX.1
)的规定:
22027:它应根据当前语言环境中的整理顺序分别对目录和非目录操作数进行排序。
26027:默认情况下,格式未指定,但输出应按字母顺序按符号名称排序:
- 库或对象名称,如果指定了-A
- 符号名称
- 符号类型
- 符号的价值
- 与符号关联的大小(如果适用)