Search code examples
bashmacosterminalrenamebatch-rename

Batch rename file with regex: remove prefix


I have files <uuid>_CS_Filename, and i want replace uuid_ => with ".*?_" to "".

How can I do this?

So, for;

1557acc7f3cd5d1538b71fe77bcf9ec0_My_filename_ch101.pdf

I want:

My_filename_ch101.pdf

I don't want to install some 3rd party packages; I searched the internet and only found brew install rename.


Solution

  • Use sed:

    filename="1557acc7f3cd5d1538b71fe77bcf9ec0_My_filename_ch101.pdf"
    newname=$(echo $filename | sed -e 's/^[a-z0-9]*_//g')
    # newname is "My_filename_ch101.pdf"
    

    Assume the files to rename are all in current directory:

    for f in *; do
      mv "$f" "$(echo $f | sed -e 's/^[a-z0-9]*_//g')"
    done