正则表达式删除文件名中的最后一个字符不起作用

时间:2014-11-10 12:45:59

标签: linux bash rename

我最近使用youtube-dl下载了一堆视频,但程序在文件名的末尾附加了字符:例如,Video test变为Video test-jSbQ40_9B.mp3。格式始终相同:破折号,以及大约10个字母数字字符或下划线。为什么以下命令什么都不做?

rename 's/[A-Za-z0-9]*\.mp3/\.mp3/' *

(我也试过以root身份运行它)

谢谢!

1 个答案:

答案 0 :(得分:0)

这应该有效:

rename 's/-\w+(\.mp3)$/$1/' *

或者其他:

rename 's/-\w+(?=\.mp3)$//' *

你的正则表达式与破折号后的文件名中存在的下划线不匹配。 \w匹配[a-zA-Z0-9_]


或者没有使用rename

find . -name "*.mp3" -exec bash -c 'mv "$1" "$(sed "s/-[^.]*\(\.mp3\)$/\1/" <<< $1)"' - {} +