基于常见模式批量重命名文件

时间:2017-04-22 21:23:12

标签: bash rename

我有很多文件,所有文件都包含text字样。

喜欢test text22 test.mp3

“test”可以包含各种字符 - > -/()(&%0-9...

现在我想重命名每个文件,以便在test_test22 test.mp4之类的每个“文本”之前添加下划线。有没有直接的方法来做到这一点?

3 个答案:

答案 0 :(得分:1)

使用Perl的独立重命名命令:

rename -n 's/ (text[0-9]{1,2})/_$1/' *text*

如果一切正常,请删除选项-n

答案 1 :(得分:0)

另一种方法是说明在Bash中使用正则表达式匹配(通常非常有用)。

#!/bin/bash
for file in *
do
  if [[ $file =~ (.*)text(.*) ]] ; then
    mv "$file" "${BASH_REMATCH[1]}text_${BASH_REMATCH[2]}"
  fi
done

如果你想做的不仅仅是重命名文件,这将特别有用。

答案 2 :(得分:0)

我假设您不想添加下划线,但替换前导空格就像在您的示例中一样(但后来又有了mp3 - > mp4所以只是确保):

$ ls
test text22 test.mp3
text22 test.mp3
$ for f in *text*; do "echo ${f/ text/_text}" ; done
test_text22 test.mp3
text22 test.mp3

mvmv "$f" "${f/ text/_text}"

替换回音
相关问题