如何通过计算名称中的数字来更改多个目录的名称?
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
find -print0
与while
和read
来自https://mywiki.wooledge.org/BashFAQ/001。
我有一些目录。他们的名字如下,
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
find -print0
与while
和read
来自https://mywiki.wooledge.org/BashFAQ/001。