如何使用特定模式重命名一堆文件

时间:2012-06-24 06:42:14

标签: linux

我想重命名目录中使用此模式命名的文件:

string1-number.html

例如:

English-5.html

我想要做的是重命名这样的文件:

string2-number.string3

例如:

Dictionary-5.en

我该怎么做? 我用过这个脚本,但什么都没发生:

echo "English-5.html" | sed   's%\({English}\).\(\.*\)\(html\)%dictionary\2\en%'

4 个答案:

答案 0 :(得分:1)

我建议使用mmv工具:http://linux.dsplabs.com.au/mmv-copy-append-link-move-multiple-files-under-linux-shell-bash-by-wildcard-patterns-p5/

你可以这样做:

mmv *-*.html Dictionary-#2.en 

答案 1 :(得分:0)

echo "English-5.html" | sed 's%English\(-[0-9][0-9]*.\)html%dictionary\1en%'

说明:

我正在寻找English

后跟一个破折号,一个或多个数字,以及一个点-[0-9][0-9]*.(我用旋转的括号括起来,使其成为一个组(组1))。

后跟html

在替换文本中,我使用\1输出组1的内容以及更改的文本。

答案 2 :(得分:0)

您有两个错误:{...}不是必需的,您混淆了\..

\.匹配文字点,而.匹配单个字符。

echo "English-5.html" |
sed 's%\(English\)\(.*\)\.\(html\)%dictionary\2.en%'

答案 3 :(得分:0)

此答案显示了已发布的sed命令的一些小优化,并显示了如何实际重命名文件(在当前文件夹中):

 for f in *; do mv "$f" $(echo "$f" |\
 sed 's/^English-\([0-9]\+\)\.html$/dictionary-\1\.en/'); done