在unix文件名中重命名子字符串

时间:2013-12-02 16:05:24

标签: regex unix rename

我有大量格式的文件:

output_t00010000-0470090205_p000000.xdr
output_t00010000-0470090205_p000001.xdr

我真正想要的是找到所有匹配 t00010000 的文件,并且对于与之匹配的每个文件,将t00010000-0470090205重命名为t00000000-0000000000。

所以我做了这样的事情:

find . -depth -name *t00010000* | xargs rename t00010000-0470090205 t00000000-0000000000

当我知道子串的后半部分时,这很好用,例如0470090205,但是这个子串是随机生成的,这取决于我运行的模拟,我事先并不知道。所以我真正想要的是:

find . -depth -name *t00010000* | xargs rename t00010000-?????????? t00000000-0000000000

但重命名不让我使用?字符匹配符号。我真的在努力解决这个问题。有人可以帮忙吗?

1 个答案:

答案 0 :(得分:3)

rename的论据是:

rename [ -v ] [ -n ] [ -f ] perlexpr [ files ]

perlexpr 应该是一个Perl表达式,它将原始名称转换为新名称。在你的情况下,它将是:

rename 's/t\d+-\d+/t00000000-0000000000/'

所以:

find . -depth -name *t00010000* | xargs rename 's/t\d+-\d+/t00000000-0000000000/'

测试rename的一个好方法是使用-n选项,它会显示每个文件在没有这样做的情况下将被重命名的内容。