user1997874
user1997874

Reputation: 33

(Bash) rename files but give it a new extension that will count up.. (md5sum)

I need to rename all files in a folder and give it a new file extension. I know how I can rename files with bash. The problem I have is, I need to rename it to:

file.01 file.02 file.03 and counting up for all files found.

Can somebody provide me an example where to start?

This is what i need:

md5sum * | sed 's/^\(\w*\)\s*\(.*\)/\2 \1/' | while read LINE; do
   mv $LINE
done

but that doesnt give it an extension that will go from file.01 file.02 file.03 etc.

Upvotes: 0

Views: 233

Answers (2)

Charles Duffy
Charles Duffy

Reputation: 295363

If one reads your requirements literally...

counter=0
for file in *; do
  read sum _ <<<"$(md5sum "$file")"
  printf -v file_new "%s.%02d" "$sum" "$counter"
  mv -- "$file" "$file_new"
  (( counter++ ))
done

This is less efficient than reading the filenames from md5sum's output, but more reliable, as globbing handles files with unusual names (newlines, special characters, etc) safely.

Upvotes: 2

kofemann
kofemann

Reputation: 4413

something line this:

i=0
for f in *
do
   if [ -f $f ]; then 
     i=`expr $i + 1` 
     if [ $i -lt 10 ]; then 
       i=0$i
     fi
     sum=`md5sum $f | cut -d ' ' -f 1` 
     mv $f $sum.$i 
   fi
done

Upvotes: 0

Related Questions