你可以做这样的事情与sed
和uniq
如果你可以定义一个正则表达式匹配一个版本号:
ls | sed -r 's/(v?-[[:digit:]].*)?\.[[:alpha:]]+$//' | uniq --repeated
这个特殊的正则表达式匹配任何一个连字符后面跟着一个数字(假设是这样的开始一个版本号),并且在任何情况下匹配文件扩展名,并将其删除。
$ ls -Fl
total 0
-rw-rw-r--. 1 dhouck dhouck 0 Aug 2 10:28 httpcore-4.3.jar
-rw-rw-r--. 1 dhouck dhouck 0 Aug 2 10:28 httpcore.jar
-rw-rw-r--. 1 dhouck dhouck 0 Aug 2 10:28 http.jar
$ ls | sed -r 's/(v?-[[:digit:]].*)?\.[[:alpha:]]+$//' | uniq --repeated
httpcore
这里的sed
命令做什么,在细节,如果你要改变它:
uniq --repeated
将采取所有这些行,并告诉你哪些是重复的。它需要排序输入,但ls
的输出已排序,sed
脚本不应更改该值。
您将“复制”定义为“多个文件,如果您从名称中删除了版本号,将具有相同的名称”?你如何定义版本号?有很多版本编号方案,对'4.3'有效的东西不一定会抓住'4.3.1'或'4.3rc1'什么的。 –
如果您从名称中删除了版本号,会有相同的名称“? - >是的。我正在处理你提到的漂亮的版本号。 – sattu
为每个文件生成一次校验和 - 查找重复的校验和。 –