linux - rename命令删除文件名中扩展名之后的最后一个破折号后的所有文本

时间:2016-01-25 19:48:42

标签: regex linux bash shell rename

我的文件格式如下:

word1 word2 word3-6b3kZ3q2i.mp4
word-8x2u3p6b4.mkv

其中一些人有多个破折号。它们都有一个名称,后跟最后一个破折号和一个字母数字ID。

我要做的是从当前目录中的每个文件名中删除最后的短划线及其后的所有文本(文件扩展名除外)。

例如:word1 word2 word3-6b3kZ3q2i.mp4word1 word2 word3.mp4

我尝试的类似问题的所有解决方案似乎都不起作用。每当我在字符串中放置破折号以查找或替换时,rename就会起作用。

有什么想法吗?

1 个答案:

答案 0 :(得分:4)

假设您有基于Perl的rename命令,则可以使用此rename命令:

rename -n 's/-[^.-]+(?=\.)//' *.*

正则表达式分手:

-       # match a hyphen
[^.-]+  # match 1 or more of any char that is not hyphen or dot
(?=\.)  # lookahead to assert that next char is dot