batch rename files with ids intact

2019-03-02 11:23发布

问题:

i have a directory listing 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 seen here:

seascape_0122.jpg

i have tried something like this:

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

i have read that you can do this with mv, rename, sed, awk, etc. can someone point me to the easiest (and clearest, hopefully) way of accomplishing this in UNIX? FWIW, I am ssh'd into a Linux machine and running a bash shell.

thanks, jml

回答1:

Very straightforward:

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

(Put echo before the mv first for a dry run.)



回答2:

With bash regular expressions

for file in *; do 
  [[ "$file" =~ [0-9]+ ]] && mv "$file" seascape_${BASH_REMATCH[0]}.jpg 
done


标签: bash rename