如何在linux中按特定部分对文件名进行排序?

时间:2014-08-13 12:46:43

标签: linux bash sorting

我的构建文件夹中有很多文件,我正在尝试使用sort命令对它们进行排序。

文件的结构如下:

名称 - 版本 - ' v' - 建立日期

  

XXX-2.0.0-快照V2014-07-10_18-01-05.log
  XXX-2.0.0-快照V2014-07-10_18-02-05.log
  XXX-2.0.0-快照V2014-07-10_18-03-05.log
  XXX-2.0.0-快照V2014-07-10_18-04-05.log
  xxx-2.0.0-SNAPSHOT-V2014-07-10_18-05-05.log

如果我们假设版本字符串将保持3位数,那么对它们进行排序很容易。如果我在这里添加2.1或2.0.0.2等不同版本怎么办?我需要这样的结果:

  

XXX-2.1-快照V2014-07-10_18-05-05.log
  XXX-2.0.2-快照V2014-07-10_18-04-05.log
  XXX-2.0.0.2-快照V2014-07-10_18-03-05.log
  XXX-2.0.0.1-快照V2014-07-10_18-02-05.log
  xxx-2.0.-SNAPSHOT-V2014-07-10_18-01-05.log

1 个答案:

答案 0 :(得分:8)

$ cat file
xxx-2.0.2-SNAPSHOT-V2014-07-10_18-04-05.log
xxx-2.0.0.2-SNAPSHOT-V2014-07-10_18-03-05.log
xxx-2.1-SNAPSHOT-V2014-07-10_18-05-05.log
xxx-2.0.0.1-SNAPSHOT-V2014-07-10_18-02-05.log
xxx-2.0.-SNAPSHOT-V2014-07-10_18-01-05.log 

$ sort -V -r -t- -k2,2 < file
xxx-2.1-SNAPSHOT-V2014-07-10_18-05-05.log
xxx-2.0.2-SNAPSHOT-V2014-07-10_18-04-05.log
xxx-2.0.0.2-SNAPSHOT-V2014-07-10_18-03-05.log
xxx-2.0.0.1-SNAPSHOT-V2014-07-10_18-02-05.log
xxx-2.0.-SNAPSHOT-V2014-07-10_18-01-05.log 

注意: sort的某些实施不支持-V选项......

说明:

  • -V:版本排序
  • -t-:拆分为带有分隔符' - '
  • 的列
  • -k2,2:按字段2&amp;列表排序只有2
  • -r:反向排序(根据您的预期输出。如果不需要,请删除此标志。)