按名称对“ ls”输出进行排序

你能按名称对 是的列表进行排序吗?

343227 次浏览

我的系统默认按名字排序,你看到了什么?

man ls指出:

列出有关 FILE 的信息(默认工作目录)。如果没有指定 -cftuvSUX--sort,则按字母顺序排序条目。

从手册页(用于 bash ls) :

如果没有-cftuSUX 或—— Sort,则按字母顺序排序条目。

对于一些简单的东西,你可以将 是的排序结合起来。只需要一个文件名列表:

ls -1 | sort

以相反的顺序对它们进行排序:

ls -1 | sort -r

注意: “ A”在“ Z”后面:

$ touch A.txt aa.txt Z.txt


$ ls

A.txt Z.txt aa.txt

检查 .bashrc文件中的别名。

* 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 命令中。

coreutils中的 ls默认执行 现场感知排序,因此在某些情况下可能产生令人惊讶的结果(例如,%foo将在 LANG=en_US中的 barquux之间排序)。如果您想要 ASCIIbetic 排序,请使用

LC_ALL=C ls

ls实用程序应符合 IEEE Std 1003.1-2001(POSIX.1)的规定:

22027: 根据当前语言环境中的排序顺序,对目录操作数和非目录操作数分别进行排序。

26027: 默认情况下,格式未指定,但 输出应按字母顺序排序按符号名称:

  • 如果指定了 -A,则为库或对象名称
  • 符号名
  • 符号类型
  • 符号的值
  • 与符号关联的大小(如果适用)

只有数字字符串不同的文件可以在分隔符前面的条件下对这个数字进行排序。

在这种情况下,可以使用以下语法:

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
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-X 为此工作,以防您将 ls 别名为更有用的默认值。

你可以试试:

ls -lru

- u 与-lt: 排序,并显示,访问时间;

我使用以下命令获得了按 姓名排序的目录的内容:

ls -h