如何对ll输出进行排序

如何对ll输出进行排序

ll返回这个结果:

51380224 Aug  3 08:23 tig_10.d1
51380224 Aug  3 08:18 tig_10.d10
51380224 Aug  3 08:20 tig_10.d11
51380224 Aug  3 08:23 tig_10.d12
51380224 Aug  3 08:21 tig_10.d13
51380224 Jul 31 12:06 tig_10.d14
131072 Jul 31 12:06 tig_10.d15
51380224 Aug  3 08:15 tig_10.d2
51380224 Aug  2 23:08 tig_10.d3
51380224 Aug  2 14:24 tig_10.d4
51380224 Aug  2 14:24 tig_10.d5
51380224 Aug  3 08:21 tig_10.d6
51380224 Aug  3 08:22 tig_10.d7
51380224 Aug  3 08:13 tig_10.d8
51380224 Aug  3 08:20 tig_10.d9

像这样列出文件失败

51380224 Aug  3 08:23 tig_10.d1
51380224 Aug  3 08:15 tig_10.d2
51380224 Aug  2 23:08 tig_10.d3
51380224 Aug  2 14:24 tig_10.d4
51380224 Aug  2 14:24 tig_10.d5
51380224 Aug  3 08:21 tig_10.d6
51380224 Aug  3 08:22 tig_10.d7
51380224 Aug  3 08:13 tig_10.d8
51380224 Aug  3 08:20 tig_10.d9
51380224 Aug  3 08:18 tig_10.d10
51380224 Aug  3 08:20 tig_10.d11
51380224 Aug  3 08:23 tig_10.d12
51380224 Aug  3 08:21 tig_10.d13
51380224 Jul 31 12:06 tig_10.d14
131072 Jul 31 12:06 tig_10.d15

有什么想法吗?

答案1

ls将重新排序您给它的文件名(或当前目录,如果您不这样做);解决这个问题的一种方法是单独给出文件名:

ls -l *.d? ; ls -l *.d??

或者,因为您似乎有一个别名/函数来执行长列表:

ll *.d?; ll *.d??

答案2

我不知道你的ll是什么。ll是 的常用别名ls -l,但看起来并不像它。

在任何情况下,特定的输出都可以按照您想要的 GNUsort及其版本排序应用于第 5 列及以上:

ll | sort -bVk5

如果 ll是某种别名,ls并且你ls是 GNU ls,那么它ls也有一个版本启用排序-v

使用shell,您可以使用选项或glob 限定符zsh以类似的方式对其 glob 进行排序。因此,如果您的命令可以获取文件名列表作为参数并且本身不进行任何进一步的排序,您可以执行以下操作(仅在 中):numericglobsort(n)llzshzsh

ll *(n)

答案3

使用sort

$ ls -lghFG | sort -n -td -k2
total 0
-rw-r--r-- 1 0 Aug  3 09:43 tig_10.d1
-rw-r--r-- 1 0 Aug  3 09:43 tig_10.d2
-rw-r--r-- 1 0 Aug  3 09:43 tig_10.d3
-rw-r--r-- 1 0 Aug  3 09:43 tig_10.d4
-rw-r--r-- 1 0 Aug  3 09:43 tig_10.d5
-rw-r--r-- 1 0 Aug  3 09:43 tig_10.d6
-rw-r--r-- 1 0 Aug  3 09:43 tig_10.d7
-rw-r--r-- 1 0 Aug  3 09:43 tig_10.d8
-rw-r--r-- 1 0 Aug  3 09:43 tig_10.d9
-rw-r--r-- 1 0 Aug  3 09:43 tig_10.d10
-rw-r--r-- 1 0 Aug  3 09:43 tig_10.d11
-rw-r--r-- 1 0 Aug  3 09:43 tig_10.d12
-rw-r--r-- 1 0 Aug  3 09:43 tig_10.d13
-rw-r--r-- 1 0 Aug  3 09:43 tig_10.d14
-rw-r--r-- 1 0 Aug  3 09:43 tig_10.d15

这将使用该字母d作为分隔符,并在字段 2 上对输出进行数字排序,因此如果您的文件名包含该字母,则可能会出现问题d

为了满足您使用ll(这是别名)的要求,您可以这样做(不推荐:

alias ll='ls -lghFG | sort -n -td -k2'

答案4

man

ll -v

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

相关内容