你能按名称对 ls 列表进行排序吗?
你能按名称对 ls 列表进行排序吗?
默认情况下,我的ls按名称进行排序。你看到了什么?
man ls
说明:
如果没有指定
-cftuvSUX
或者--sort
,则列出关于FILEs(默认为当前目录)的信息。以字母顺序排序条目。
ls -la
命令,我看到:.bashrc - can - .config - Downloads - .local - tmp
,按名称排序应为:.bashrc - .config - .local - Downloads - can - tmp
。 - 12431234123412341234123ls -c1
按创建时间排序(即对inode的最后更改时间,而不是出生时间),从新到旧,在单列中。 ls -cl
会失去这种排序顺序,除非您使用 ls -clt
。 如果您不想按创建时间排序,请不要在没有 -l
的情况下使用 -c
。 - Adam Katz如果只是要列出文件名,可以将 ls 和 sort 结合起来。
ls -1 | sort
要以相反的顺序对它们进行排序:
ls -1 | sort -r
ls | sort -n
,如下所示:
1.1.1;
1.1.2;
1.1.3;
2.10.1;
2.10.15;
2.10.2;
2.10.20;
2.10.21;
2.1.1;
2.1.10;
2.1.15;
2.1.2;
2.1.3;
2.1.4;
10.1.1;
10.1.2;
10.1.3;
11.0.1;
11.0.2;
11.0.20;
11.0.21;
11.0.22;
正如您看到的,2.10.15排在2.10.2之前。 - BBKls -1r
。 - Ash Ryan Arnwine$ ls -l tmp
read_csv.fxl
read.fxl
read_ssv.fxl
这显然是无序的,因为“.” < “_”,所以如果按排序顺序排列,read.fxl将首先出现。我有点惊讶/bin/ls没有一个选项,只是意味着“按名称排序”。请注意,我使用的是“ls -1”,即数字ONE,而不是“ls -l”,它确实按名称排序。 - Patrick Chkoreffcoreutils
中的 ls
命令默认执行一个本地化感知排序,因此在某些情况下可能会产生令人惊讶的结果(例如,在 LANG=en_US
的情况下,%foo
将在 bar
和 quux
之间排序)。如果您想进行 ASCIIbetical 排序,请使用
LC_ALL=C ls
LANG
影响排序行为,这篇文章对我帮助很大! - yurenchen?
。你可以通过将其管道化到 cat、使用 C.UTF-8
区域设置(如果系统支持)和/或使用 -b
标志来“修复”这个问题。更好的方法是不要使用 ls
,而是使用 find
命令。 - 12431234123412341234123ls
将连字符排在短划线之前。 - Jamy Mahabierls -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
对文件名进行升序排列,需要提供停止排序的位置,这种情况下是相同的列。 列从1
开始计数。--ignore-case
选项。9
排序到相同的列9
。正常的ls
输出看起来像这样:drwx------ 8 999 user 4.0K Feb 5 2017 file.txt
,因此第9列是文件名称。如果你想忽略大小写,在排序时使用--ignore-case
。 - luckydonald如果文件只有一个数字字符串不同,可以通过该数字进行排序,前提是它前面有分隔符。
在这种情况下,可以使用以下语法:
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
$ touch A.txt aa.txt Z.txt
$ ls
A.txt Z.txt aa.txt
(文件名)从bash ls的手册中可以得知:
如果没有使用-cftuSUX或--sort,那么按字母顺序对条目进行排序。
which ls
也会成功。相反,在bash中执行builtin ls
,会得到一个错误。 - Pianosaurusls
实用程序应符合IEEE Std 1003.1-2001 (POSIX.1
)的规定:
22027: 根据当前语言环境的排序顺序,它应该将目录和非目录操作数分别排序。
26027: 默认情况下,格式未指定,但输出应按符号名称字母顺序排序:
- 如果指定了−A,则为库或对象名称
- 符号名称
- 符号类型
- 符号的值
- 与符号相关联的大小(如果适用)
如果您已经将ls别名设置为更有用的默认值,则可以使用ls -X来实现此目的。
请检查您的.bashrc
文件中的别名。
alias
命令,查看所有当前别名。 - Krzysztof Jabłoński