Home > Blockchain >  How to change multiple directories' name by computation on the numbers in the names?
How to change multiple directories' name by computation on the numbers in the names?

Time:04-20

I have some directories. Their names are as follows,

s1_tw
s2_tw
s3_tw
s4_tw

How to change their names by add a fixed integer to the number following "s"? How can I change the directories' name to

s22_tw
s23_tw
s24_tw
s25_tw

by changing s1 to s22 (1 21 = 22), s2 to s23, etc? (Here adding 21 is expected)

I tried with

for f in s*_tw
do 
    for i in `seq 1 1 4`
    do 
        mv -i "${f//s${i}/s(${i} 21)}"
    done
done

But I know it is not correct, because I can not perform addition operation in this command. Could you please give some suggestions?

CodePudding user response:

This will rename your directories:

#!/bin/bash

find . -maxdepth 1 -type d -name "s?_tw" -print0 | while IFS= read -r -d '' dir
do
    digit=$(echo "$dir" | sed 's#./s\([0-9]\)_tw#\1#')
    echo "DIGIT=$digit"

    (( newdigit = digit   21 ))
    echo "NEWDIGIT=$newdigit"

    mv "$dir" "s${newdigit}_tw"
done
  • Related