Batch rename files with fixed identifiers

I have a list of directories like

seascaperecovered0088crop.jpg seascaperecovered0096crop.jpg seascaperecovered0098crop.jpg seascaperecovered0101crop.jpg seascaperecovered0103crop.jpg seascaperecovered0105crop.jpg seascaperecovered0107crop.jpg seascaperecovered0112crop.jpg seascaperecovered0119crop.jpg seascaperecovered0122crop.jpg 

and I want to rename all files as shown here:

 seascape_0122.jpg 

I tried something like this:

 for f in `ls | egrep 'seascaperecovered.*\.jpg'`; do mv $f ${f/seascaperecovered/seascape}; done 

I read that you can do this with mv, rename, sed, awk, etc. can someone point me to the easiest (and clear, hopefully) way to do this on UNIX? FWIW, I ssh'd to the Linux machine and run the bash shell.

thanks jml

+1
bash rename
Aug 16 2018-11-11T00:
source share
2 answers

Very simple:

 for i in seascaperecovered*.jpg; do A=${i/crop/}; mv $i ${A/recovered/_}; done 

(Put echo in front of mv first for a dry run.)

+5
Aug 16 2018-11-11T00:
source share

With bash regex

 for file in *; do [[ "$file" =~ [0-9]+ ]] && mv "$file" seascape_${BASH_REMATCH[0]}.jpg done 
+1
Aug 17 '11 at 12:45 a.m.
source share



All Articles