Linux重命名功能未正确使用

时间:2010-12-22 15:09:58

标签: linux ubuntu terminal unix

我正在尝试在Ubuntu的终端中使用rename命令将字符串附加到某些avi文件名的开头,如下所示。

rename -n 's/(\w)\.avi$/String_to_add__$1\.avi/' *.avi

所以我期待以下内容:

String_to_add_MyMovie.avi

问题是,当我运行命令时,它将字符串附加到文件名的末尾,所以我最终得到以下内容:

MyMovie_String_to_add_.avi

我不确定我是否有错误的perlexpr语法或其他内容。任何见解都表示赞赏。

更新:

感谢您的建议,我尝试了alno和plundra的建议,并进行了以下修改:

rename -n 's/(\w+)\.avi$/String_to_add__$1\.avi/' *.avi

但现在该文件将字符串插入名称中间,如下所示:

My_String_to_add_Movie

我很抱歉,我忽略了提到标题前面有3个数字值,因此文件名命名为{3 numbers}-My_Movie.avi,例如001-My_Movie.avi。但我认为这不会产生影响,因为我假设\w+匹配字母数字字符,可能' - '是问题吗?

还没有尝试过Christian的方法,我希望能够使用rename命令,或者至少在我尝试不同的方法之前理解为什么它不起作用。

3 个答案:

答案 0 :(得分:2)

我不认为重命名-n是标准的。你可以这样做:

for i in *.avi; do mv $i String_to_add_$i; done

答案 1 :(得分:1)

您只需将\w与单个字符匹配,您需要\w+,因此完整的行将是:

rename -n 's/(\w+)\.avi$/String_to_add__$1\.avi/' *.avi

答案 2 :(得分:1)

正确版本:

rename -n 's/(\w+)\.avi$/String_to_add__$1\.avi/' *.avi

你只是在\ w之后忘了+,所以它试图只匹配一个角色。