I'm new with Linux, sed
, and awk
but I don't mind challenging myself on new ideas. That being said, I understand the purpose and how to use rename
and sed
for a common event such as adding a $date
or removing a _1234
from all the files. However, I want to figure out how to rename 100's of files that have no relation to one another other than the file type.
Renaming example:
- old name alpha.ai renamed to omega.ai
- old name pie32.ai renamed to apple.ai
- old name xmas.ai renamed to santa.ai
I originally used a bash script to pull all the names to a .csv file and placed them in column A. In column B I wrote in the new names. Now since there is not a common event occurring how could you write sed
or the like to do this??
#!/bin/bash
for i in *.ai
do
mv $i $(echo $i | sed "a1,b1")
done
Best Answer
If you happen to have a file that looks like this:
You can do a dirty little trick:
The sed comamnds (delimited by semicolons) does this (
s
is for substitute,/
is used as a delimiter, any other character would do,@
is often used as well):s/^/mv -vi "/
- addsmv -vi "
at the beginning of each line (^
is beginning of line);s/, /" "/
- replaces comma followed by a space with" "
;s/$/";/
- appends double quotes to all lines ($
means end of line)and hence the output of
sed
will be this:which will be fed to
bash
to execute. The quotes around filenames are not mandatory, they just guard any possible spaces in the filenames (however they will defintely not help against spaces followed by a comma, since that is used as delimiter). the-v
instructsmv
to display what it is doing (in case something goes wrong, you'll know what happened),-i
will cause it to ask if it were to overwrite already existing file.