根据文件名中间的版本号对文件进行排序
Sorting of files based on version number in the middle of the file name
我是新手shell。我正在尝试对名称中间有版本号的文件列表进行排序。
这是文件列表:
sample-file-1.1.0-patch.zip
sample-file-1.1.1-patch.zip
sample-file-1.1.2-patch.zip
sample-file-1.1.2.1-fix-patch.zip
sample-file-1.1.3-patch.zip
sample-file-1.1.3.1-fix-patch.zip
..
sample-file-1.1.15-patch.zip
sample-file-1.1.15.1-fix-patch.zip
sample-file-1.1.15.2-fix-patch.zip
..
sample-file-2.0.0-patch.zip
sample-file-2.0.1-patch.zip
..
我想请你帮我解决排序逻辑问题。
谢谢
最简单的示例输入方法如下,它假定 -
之后的第一个数字开始版本号,并以后续 -
之前的最后一个数字结束:
Get-ChildItem *.zip | Sort-Object { [version]($_.Name -replace '^[^\d]+-(.*\d)-.*', '') }
$_.Name -replace '^[^\d]+-(.*\d)-.*', ''
从每个文件名中提取版本号作为字符串。
[version]
将该字符串转换为版本号对象 (System.Version
)[1]
,可根据版本号组件进行排序。
将整个表达式作为脚本块 { ... }
传递到 Sort-Object
意味着排序基于脚本块返回的 [version]
个实例,评估每个输入文件名。
[1] PSv5.1 在 semantic versioning 的基础上引入了一个相关的类型 [System.Management.Automation.SemanticVersion]
,但是在这里不起作用,因为它只支持 3 版本号组件。
我是新手shell。我正在尝试对名称中间有版本号的文件列表进行排序。
这是文件列表:
sample-file-1.1.0-patch.zip
sample-file-1.1.1-patch.zip
sample-file-1.1.2-patch.zip
sample-file-1.1.2.1-fix-patch.zip
sample-file-1.1.3-patch.zip
sample-file-1.1.3.1-fix-patch.zip
..
sample-file-1.1.15-patch.zip
sample-file-1.1.15.1-fix-patch.zip
sample-file-1.1.15.2-fix-patch.zip
..
sample-file-2.0.0-patch.zip
sample-file-2.0.1-patch.zip
..
我想请你帮我解决排序逻辑问题。
谢谢
最简单的示例输入方法如下,它假定 -
之后的第一个数字开始版本号,并以后续 -
之前的最后一个数字结束:
Get-ChildItem *.zip | Sort-Object { [version]($_.Name -replace '^[^\d]+-(.*\d)-.*', '') }
$_.Name -replace '^[^\d]+-(.*\d)-.*', ''
从每个文件名中提取版本号作为字符串。[version]
将该字符串转换为版本号对象 (System.Version
)[1] ,可根据版本号组件进行排序。将整个表达式作为脚本块
{ ... }
传递到Sort-Object
意味着排序基于脚本块返回的[version]
个实例,评估每个输入文件名。
[1] PSv5.1 在 semantic versioning 的基础上引入了一个相关的类型 [System.Management.Automation.SemanticVersion]
,但是在这里不起作用,因为它只支持 3 版本号组件。