我有一组文件,它们的名字可能包含字母,数字,空格,圆点,连字符或下划线。
可能性是:
word-123_AnotherWord-asdf1234567.mp4
word-123_AnotherWord-ASDF1234567.mp4
word-123_AnotherWord-1234567asdf.mp4
word-123_AnotherWord-1a2s3d4f5g6.mp4
word-123_AnotherWord-asdf-123456.mp4
word-123_AnotherWord-asdf_123456.mp4
word-123_AnotherWord-123456-asdf.mp4
word-123_AnotherWord-123456_asdf.mp4
word-123_AnotherWord-asdf123456-.mp4
word-123_AnotherWord-asdf123456_.mp4
word-123_AnotherWord--asdf123456.mp4
word-123_AnotherWord-_asdf123456.mp4
word-123_AnotherWord--asdf_12345.mp4
word-123_AnotherWord-_asdf-12345.mp4
word-123_AnotherWord-asdf--12345.mp4
word-123_AnotherWord-asdf_-12345.mp4
... etc
我想:
(1)使用RegEx 获取其姓名的最后11个文本字符串(无论它是什么)。
也许RegEx可以是这样的:
/([a-zA-Z0-9-_]{11})+(?:\.mp4)$/
(2)重命名文件,使用此RegEx部分,为:
outputregex.mp4
这样的事情:
for i in *.mp4;
do new_name=RegEx from i;
$i rename to $new_name;
done
感谢您的合作!
答案 0 :(得分:2)
从您的示例和评论中,您似乎想要这样:
rename 's/^.*\W(\w{1,11}\.mp4)$/$1/' *.mp4
这个第一个命令仅匹配在该单词之前有非alpha字符。如果不是要求,那么你可以使用这个:
rename 's/.*?(\w{1,11}\.mp4)$/$1/' *.mp4
如果您想要.mp4之前的最后11个字符,无论它们是什么,请使用
rename 's/.*?(.{1,11}\.mp4)$/$1/' *.mp4
没有必要循环,rename
为你做。
答案 1 :(得分:1)
您可以使用此rename
脚本:
for f in *.mp4; do
rename 's/^.+?\b(\w+)(?=\.mp4$)/$1/' "$f"
done
你可以使用(感谢@anishsane)单个命令:
rename -n 's/^.+?([\w-]{11})\.mp4$/$1/' *.mp4
PS:对-n
命令的干运行使用rename
选项。