Rename files and directories using substitution and variables

Posted by rednectar on Stack Overflow See other posts from Stack Overflow or by rednectar
Published on 2013-11-05T03:50:59Z Indexed on 2013/11/05 3:53 UTC
Read the original article Hit count: 253

I have found several similar questions that have solutions, except they don't involve variables.

I have a particular pattern in a tree of files and directories - the pattern is the word TEMPLATE. I want a script file to rename all of the files and directories by replacing the word TEMPLATE with some other name that is contained in the variable ${newName}

If I knew that the value of ${newName} was say "Fred lives here", then the command

find . -name '*TEMPLATE*' -exec bash -c 'mv "$0" "${0/TEMPLATE/Fred lives here}"' {} \;

will do the job

However, if my script is:

newName="Fred lives here"
find . -name '*TEMPLATE*' -exec bash -c 'mv "$0" "${0/TEMPLATE/${newName}}"' {} \;

then the word TEMPLATE is replaced by null rather than "Fred lives here"

I need the "" around $0 because there are spaces in the path name, so I can't do something like:

find . -name '*TEMPLATE*' -exec bash -c 'mv "$0" "${0/TEMPLATE/"${newName}"}"' {} \;

Can anyone help me get this script to work so that all files and directories that contain the word TEMPLATE have TEMPLATE replaced by whatever the value of ${newName} is

eg, if newName="A different name" and a I had directory of

/foo/bar/some TEMPLATE directory/with files then the directory would be renamed to

/foo/bar/some A different name directory/with files

and a file called some TEMPLATE file would be renamed to

some A different name file

© Stack Overflow or respective owner

Related posts about bash

Related posts about file