基于普通模式批量重命名文件
问题描述:
我有很多文件,他们中都有文字text
。基于普通模式批量重命名文件
像test text22 test.mp3
“测试”可以包括各种人物 - >-/()(&%0-9...
现在我想,这样一个下划线每一个“文本”前加入像test_test22 test.mp4
到每一个文件重命名。有没有一个简单的方法来做到这一点?
答
Perl的独立的重命名命令:
rename -n 's/ (text[0-9]{1,2})/_$1/' *text*
如果一切正常,删除选项-n
。
答
另一种方法来说明在Bash中正则表达式匹配(通常非常有用)的用法。
#!/bin/bash
for file in *
do
if [[ $file =~ (.*)text(.*) ]] ; then
mv "$file" "${BASH_REMATCH[1]}text_${BASH_REMATCH[2]}"
fi
done
如果你想要做的不仅仅是重命名文件,这将特别有用。
答
我假设你不想在你的例子添加下划线,但与代替前导空格它像(但话又说回来,它有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}"
回声请看看:?当有人回答我的问题,我应该怎么办(http://*.com/help/someone-answers) – Cyrus