【问题标题】:Renaming substring in unix filenames重命名 unix 文件名中的子字符串
【发布时间】:2013-12-18 09:53:48
【问题描述】:

我有很多格式的文件:

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

但是重命名不允许我使用 ?字符匹配符号。我真的很挣扎如何解决这个问题。任何人都可以帮忙吗?

【问题讨论】:

    标签: regex unix rename


    【解决方案1】:

    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 选项,它会告诉您每个文件将被重命名为什么,而无需这样做。

    【讨论】:

    • 感谢 -n 提示,我以后一定会使用它。
    猜你喜欢
    • 2011-12-27
    • 1970-01-01
    • 2018-07-12
    • 1970-01-01
    • 1970-01-01
    • 2020-12-01
    • 2016-02-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多