我有很多文件,所有文件都包含text
字样。
喜欢test text22 test.mp3
“test”可以包含各种字符 - > -/()(&%0-9...
现在我想重命名每个文件,以便在test_test22 test.mp4
之类的每个“文本”之前添加下划线。有没有直接的方法来做到这一点?
答案 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
要mv
用mv "$f" "${f/ text/_text}"