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