按字母顺序列出长度文件名顺序的文件

时间:2012-07-26 17:45:55

标签: bash shell

我有这些文件:

-rw-rw-r-- 1 root     boincadm 21170 Jul 19 16:42 wilson_job_79
-rw-rw-r-- 1 root     boincadm 18170 Jul 19 16:42 wilson_job_8
-rw-rw-r-- 1 root     boincadm 21288 Jul 19 16:42 wilson_job_80
-rw-rw-r-- 1 root     boincadm 21180 Jul 19 16:38 wilson_job_81
-rw-rw-r-- 1 root     boincadm 21156 Jul 19 16:36 wilson_job_82
-rw-rw-r-- 1 root     boincadm 21414 Jul 19 16:26 wilson_job_85
-rw-rw-r-- 1 root     boincadm 21194 Jul 19 16:29 wilson_job_86
-rw-rw-r-- 1 root     boincadm 21148 Jul 19 16:29 wilson_job_87
-rw-rw-r-- 1 root     boincadm 21176 Jul 19 16:27 wilson_job_88
-rw-rw-r-- 1 root     boincadm 21240 Jul 19 16:42 wilson_job_89
-rw-rw-r-- 1 root     boincadm 18136 Jul 19 16:26 wilson_job_9
-rw-rw-r-- 1 root     boincadm 21260 Jul 19 16:38 wilson_job_90
-rw-rw-r-- 1 root     boincadm 21174 Jul 19 16:34 wilson_job_91

当我列出时,我希望答案按顺序排列:

-rw-rw-r-- 1 root     boincadm 18170 Jul 19 16:42 wilson_job_8
-rw-rw-r-- 1 root     boincadm 18136 Jul 19 16:26 wilson_job_9
-rw-rw-r-- 1 root     boincadm 21170 Jul 19 16:42 wilson_job_79
-rw-rw-r-- 1 root     boincadm 21288 Jul 19 16:42 wilson_job_80
-rw-rw-r-- 1 root     boincadm 21180 Jul 19 16:38 wilson_job_81
-rw-rw-r-- 1 root     boincadm 21156 Jul 19 16:36 wilson_job_82
-rw-rw-r-- 1 root     boincadm 21414 Jul 19 16:26 wilson_job_85
-rw-rw-r-- 1 root     boincadm 21194 Jul 19 16:29 wilson_job_86
-rw-rw-r-- 1 root     boincadm 21148 Jul 19 16:29 wilson_job_87
-rw-rw-r-- 1 root     boincadm 21176 Jul 19 16:27 wilson_job_88
-rw-rw-r-- 1 root     boincadm 21240 Jul 19 16:42 wilson_job_89
-rw-rw-r-- 1 root     boincadm 21260 Jul 19 16:38 wilson_job_90
-rw-rw-r-- 1 root     boincadm 21174 Jul 19 16:34 wilson_job_91

我该怎么做?

5 个答案:

答案 0 :(得分:2)

利用下划线字符“_”仅出现在ls -l输出中的文件名中这一事实:

ls -l | sort -t_ -k1,2 -k3n

答案 1 :(得分:2)

答案 2 :(得分:1)

试试这个:

ls | sort -V | xargs -i ls -ld {}

这运行ls(只输出文件名列表),通过sort -V(它执行“版本号”排序)管理它,然后将每行发送到ls -ld(输出每个文件的详细信息)

答案 3 :(得分:1)

使用sed,假设文件名中只有数字位于排序字段中:

ls | sed 's/[^0-9]*\([0-9]*\)*/\1 &/' | sort -n -k1 | cut -d' ' -f2
  • 这里的sed命令只用文件创建一个新列 例如,对于file23,它将打印出“23 file23”。

  • sort命令数字(-n)按第一个字段(或键, -k1

  • cut命令删除第一个字段,仅打印第二个字段 字段(-f2)。例如,它会从输入file23打印23 file23

答案 4 :(得分:0)

在第9个字段使用版本排序:

ls -l | sort -k9V