Rename small part of multiple files in middle of name using Bash?

前端 未结 4 1934
孤独总比滥情好
孤独总比滥情好 2021-02-04 04:15

I\'d just like to change this

cc211_AMBER_13062012i.II  cc211_GROMOS_13062012i.II
cc211_CHARM_13062012i.II  cc211_OPLS_13062012i.II

to

相关标签:
4条回答
  • 2021-02-04 04:45

    I'm using a pure Linux solution:

    ### find all files that contains _DES in name and duplicate them adding _AUXLOCAL
    for f in **/*_DES*; do
        cp "$f" "${f%.DES}_AUXLOCAL"
    done 
    ###Rename all _AUXLOCAL files, removing _DES to _LOCAL
    for f in **/*_AUXLOCAL*; do
      mv "$f" "${f/_DES/_LOCAL}"
    done
    ###Rename all _AUXLOCAL files, removing _AUXLOCAL
    for f in **/*_AUXLOCAL*; do
      mv "$f" "${f/_AUXLOCAL/}"
    done
    

    I hope it helps

    0 讨论(0)
  • 2021-02-04 04:48
    rename 's/_13/_15/' cc*
    

    Should do what you want. The regular expression s/_13/_15/ replaces _13 by _15 in all files starting 'cc'.

    $ ls
    cc211_AMBER_13062012.II  cc211_GROMOS_13062012.II
    cc211_CHARM_13062012.II  cc211_OPLS_13062012.II
    
    $ rename 's/_13/_15/' cc*
    
    $ ls
    cc211_AMBER_15062012.II  cc211_GROMOS_15062012.II
    cc211_CHARM_15062012.II  cc211_OPLS_15062012.II
    

    This will only work with the newer perl version of rename. To check which version you have do man rename. If the top of the page says

    Perl Programmers Reference Guide

    you have the perl version. If it says:

    Linux Programmer's Manual

    you have the standard (older) version.

    For the older version, the command should be:

    rename _13 _15 cc*
    
    0 讨论(0)
  • 2021-02-04 04:49

    How about this:

    for i in *.II; do mv $i $(echo $i | sed 's/_13/_15/g'); done
    

    This will replace _13 with _15 in all files with extension .II

    More information on sed here.

    0 讨论(0)
  • 2021-02-04 04:49

    A pure bash solution:

    for i in cc*; do
      mv "$i" "${i/_13/_15}"
    done
    
    0 讨论(0)
提交回复
热议问题