Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在linux中如何按特定部分对文件名进行排序?_Linux_Bash_Sorting - Fatal编程技术网

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

在linux中如何按特定部分对文件名进行排序?,linux,bash,sorting,Linux,Bash,Sorting,我的构建文件夹中有很多文件,我正在尝试使用sort命令对它们进行排序 文件的结构如下所示: 名称-版本-“v”-生成日期 xxx-2.0.0-SNAPSHOT-V2014-07-10_18-01-05.日志 xxx-2.0.0-SNAPSHOT-V2014-07-10_18-02-05.日志 xxx-2.0.0-SNAPSHOT-V2014-07-10_18-03-05.日志 xxx-2.0.0-SNAPSHOT-V2014-07-10_18-04-05.日志 xxx-2.0.0-SNAPSHO

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

文件的结构如下所示:

名称-版本-“v”-生成日期

xxx-2.0.0-SNAPSHOT-V2014-07-10_18-01-05.日志
xxx-2.0.0-SNAPSHOT-V2014-07-10_18-02-05.日志
xxx-2.0.0-SNAPSHOT-V2014-07-10_18-03-05.日志
xxx-2.0.0-SNAPSHOT-V2014-07-10_18-04-05.日志
xxx-2.0.0-SNAPSHOT-V2014-07-10_18-05-05.log

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

xxx-2.1-SNAPSHOT-V2014-07-10_18-05-05.日志
xxx-2.0.2-SNAPSHOT-V2014-07-10_18-04-05.日志
xxx-2.0.0.2-SNAPSHOT-V2014-07-10_18-03-05.日志
xxx-2.0.0.1-SNAPSHOT-V2014-07-10_18-02-05.日志
xxx-2.0.-SNAPSHOT-V2014-07-10_18-01-05.log

$cat文件
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<文件
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
注意:排序的一些实现不支持
-V
选项

说明:

  • -V:版本排序
  • -t-:拆分为带分隔符'-'的列
  • -k2,2:按字段2排序&仅2
  • -r:反向排序(基于预期输出。如果不需要,请删除此标志。)
$cat文件
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<文件
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
注意:排序的一些实现不支持
-V
选项

说明:

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

对不起,我添加了
排序
命令的输出,但没有
-r
。。。更正。这是按日期戳排序。OP似乎表示他想按版本号排序。anishsane,谢谢你的回答。但如果我不理解错了,您通过将日期作为字符串的一部分进行排序。如果我现在发布一个旧版本呢?例如,当前版本2.1,但我发布了@EtanReisner所说的2.0.2。啊!然后我先前的回答(在评论中发布,稍后删除)是正确的。。。基于第一个代码部分(所有版本都相同),我认为您明确希望按日期排序。@oko:更新了答案…对不起,我添加了
排序
命令的输出,但没有
-r
。。。更正。这是按日期戳排序。OP似乎表示他想按版本号排序。anishsane,谢谢你的回答。但如果我不理解错了,您通过将日期作为字符串的一部分进行排序。如果我现在发布一个旧版本呢?例如,当前版本2.1,但我发布了@EtanReisner所说的2.0.2。啊!然后我先前的回答(在评论中发布,稍后删除)是正确的。。。基于第一个代码段(所有版本都相同),我认为您明确希望按日期排序。@oko:更新了答案…您是按日期排序还是按版本号排序?当然是按版本排序。但在第二部分中,相同的版本必须按日期排序。您是按日期排序还是按版本号排序?当然,首先是按版本排序。但在第二部分中,相同的版本必须按日期排序。
$ 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