如何通过计算名称中的数字来更改多个目录的名称?

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

我有一些目录。他们的名字如下,

s1_tw
s2_tw
s3_tw
s4_tw

如何通过在“s”后面的数字加一个固定整数来更改他们的名字?如何将目录名称更改为

s22_tw
s23_tw
s24_tw
s25_tw

通过将 s1 更改为 s22 (1 + 21 = 22),将 s2 更改为 s23,等等? (这里应该加21)

我试过

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

但我知道这是不正确的,因为我不能在这个命令中进行加法运算。能给点建议吗?

这将重命名您的目录:

#!/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##')
    echo "DIGIT=$digit"

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

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