我有大量格式的文件:
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
但重命名不让我使用?字符匹配符号。我真的在努力解决这个问题。有人可以帮忙吗?
答案 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
选项,它会显示每个文件在没有这样做的情况下将被重命名的内容。