Linux cp with a regexp

后端 未结 3 888
孤街浪徒
孤街浪徒 2021-02-10 12:11

I would like to copy some files in a directory, renaming the files but conserving extension. Is this possible with a simple cp, using regex ?

For example :

相关标签:
3条回答
  • 2021-02-10 12:47

    Suppose you have myfile.a, myfile.b, myfile.c:

    for i in myfile.*; do echo mv "$i" "${i/myfile./newname.}"; done
    

    This creates (upon removal of echo) newname.a, newname.b, newname.c.

    0 讨论(0)
  • 2021-02-10 12:48

    The shell doesn't understand general regexes; you'll have to outsource to auxiliary programs for that. The classical scripty way to solve your task would be something like

    for a in myfile.* ; do
      b=`echo $a | sed 's!^myfile!mydir/newname!'`
      cp $a $b
    done
    

    Or have a perl script generate a list of commands that you then source into the shell.

    0 讨论(0)
  • 2021-02-10 13:00

    I really like the regex syntax of the rename perl script (by Robin Barker and Larry Wall), e.g.:

    rename "s/OldFile/NewFile/" OldFile*

    OldFile.c and OldFile.h are renamed to NewFile.c and NewFile.h, respectively

    I simply wanted the exact same thing with a copy command:

    copy "s/OldFile/NewFile/" OldFile*

    So I duplicated that script and changed the rename statement to copy via File::Copy. Et voila! A copy command with perl-regex syntax:

    https://gist.github.com/jcward/0ead33bd79f2061c68728cc82582241f

    0 讨论(0)
提交回复
热议问题