需要使用sed和find重命名目录中的许多文件

时间:2013-05-23 18:09:22

标签: regex bash sed

我想用* -6.1.dll重命名所有名为* -6.0.dll的文件 我试过了:

 find . -name '*-6.0.dll*' -exec mv {} $(echo {} | sed -e 's/-6.0.dll/-6.1.dll/g') \;

但这不起作用;文件名没有改变。

有什么想法吗?

2 个答案:

答案 0 :(得分:4)

for x in *-6.0.dll; do y=$(echo $x | sed -e 's/-6\.0\.dll$/-6.1.dll/'); echo mv $x $y; done

如果您对结果正确感到满意,请删除echo

答案 1 :(得分:1)

使用这个: find . -name '*-6.0.dll*' -exec sh -c 'mv {} $(echo {} | sed -e 's/\-6\.0\.dll/\-6\.1\.dll/g')' \;

可以在此处找到使用sh -c vs mv的说明http://linuxplayer.org/2010/05/shell-programming-trap-batch-rename-with-find

我还修改了你的正则表达式,需要转义一些字符才能正确匹配。